VTK  9.1.0
vtkOpenGLContextDevice2D.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkOpenGLContextDevice2D.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15
49#ifndef vtkOpenGLContextDevice2D_h
50#define vtkOpenGLContextDevice2D_h
51
52#include "vtkContextDevice2D.h"
53#include "vtkRenderingContextOpenGL2Module.h" // For export macro
54
55#include <list> // for std::list
56#include <vector> // STL Header
57
58class vtkMatrix4x4;
59class vtkOpenGLExtensionManager;
60class vtkOpenGLHelper;
62class vtkPath;
63class vtkRenderer;
66class vtkTransform;
67class vtkViewport;
68class vtkWindow;
69
70class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
71{
72public:
74 void PrintSelf(ostream& os, vtkIndent indent) override;
75
80
86 void DrawPoly(float* f, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
87
94 void DrawLines(float* f, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
95
101 void DrawPoints(float* points, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
102
109 void DrawPointSprites(vtkImageData* sprite, float* points, int n, unsigned char* colors = nullptr,
110 int nc_comps = 0) override;
111
127 void DrawMarkers(int shape, bool highlight, float* points, int n, unsigned char* colors = nullptr,
128 int nc_comps = 0) override;
129
131
136 vtkSetMacro(MaximumMarkerCacheSize, int);
137 vtkGetMacro(MaximumMarkerCacheSize, int);
139
143 void DrawQuad(float* points, int n) override;
144
148 void DrawQuadStrip(float* points, int n) override;
149
153 void DrawPolygon(float*, int) override;
155 float* points, int numPoints, unsigned char* colors = nullptr, int nc_comps = 0) override;
156
168 void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
169 float startAngle, float stopAngle) override;
170
178 float x, float y, float rX, float rY, float startAngle, float stopAngle) override;
179
183 void DrawString(float* point, const vtkStdString& string) override;
184
193 void ComputeStringBounds(const vtkStdString& string, float bounds[4]) override;
194
198 void DrawString(float* point, const vtkUnicodeString& string) override;
199
208 void ComputeStringBounds(const vtkUnicodeString& string, float bounds[4]) override;
209
215 void ComputeJustifiedStringBounds(const char* string, float bounds[4]) override;
216
221 void DrawMathTextString(float point[2], const vtkStdString& string) override;
222
227 void DrawImage(float p[2], float scale, vtkImageData* image) override;
228
234 void DrawImage(const vtkRectf& pos, vtkImageData* image) override;
235
240 void DrawPolyData(float p[2], float scale, vtkPolyData* polyData, vtkUnsignedCharArray* colors,
241 int scalarMode) override;
242
246 void SetColor4(unsigned char color[4]) override;
247
251 virtual void SetColor(unsigned char color[3]);
252
256 void SetTexture(vtkImageData* image, int properties = 0) override;
257
261 void SetPointSize(float size) override;
262
266 void SetLineWidth(float width) override;
267
271 void SetLineType(int type) override;
272
276 void MultiplyMatrix(vtkMatrix3x3* m) override;
277
281 void SetMatrix(vtkMatrix3x3* m) override;
282
286 void GetMatrix(vtkMatrix3x3* m) override;
287
291 void PushMatrix() override;
292
296 void PopMatrix() override;
297
298 /*
299 * Supply an int array of length 4 with x1, y1, width, height specifying
300 * clipping region for the device in pixels.
301 */
302 void SetClipping(int* x) override;
303
307 void EnableClipping(bool enable) override;
308
312 void Begin(vtkViewport* viewport) override;
313
317 void End() override;
318
327
335 void BufferIdModeEnd() override;
336
343
349
353 bool HasGLSL();
354
356
359 vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
361
367 virtual void ReleaseGraphicsResources(vtkWindow* window);
368
370
376
377protected:
380
388 int GetNumberOfArcIterations(float rX, float rY, float startAngle, float stopAngle);
389
394
399
401
404 class Private;
406
407 class CellArrayHelper;
410
415
416 vtkOpenGLHelper* LinesCBO; // vertex + color
420 vtkOpenGLHelper* VCBO; // vertex + color
424 vtkOpenGLHelper* VTBO; // vertex + tcoord
426 vtkOpenGLHelper* SCBO; // sprite + color
430
433 vtkOpenGLHelper* cbo, float* v, int nv, unsigned char* coolors, int nc, float* tcoords);
435 std::vector<float>& tverts, unsigned char* colors = nullptr, int numComp = 0);
436 // used for stipples
437 unsigned short LinePattern;
438
440
445 int shape, bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
447 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
449 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
451 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
453 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
455 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
457
459
463 void DrawImageGL2PS(float p[2], float scale, vtkImageData* image);
466
468
471 void DrawCircleGL2PS(float x, float y, float rX, float rY);
472 void DrawWedgeGL2PS(float x, float y, float outRx, float outRy, float inRx, float inRy);
474
478 void AddEllipseToPath(vtkPath* path, float x, float y, float rx, float ry, bool reverse);
479
483 void TransformPath(vtkPath* path) const;
484
488 void TransformPoint(float& x, float& y) const;
489
493 void TransformSize(float& dx, float& dy) const;
494
495private:
497 void operator=(const vtkOpenGLContextDevice2D&) = delete;
498
505 vtkImageData* GetMarker(int shape, int size, bool highlight);
506
507 class vtkMarkerCacheObject
508 {
509 public:
510 vtkTypeUInt64 Key;
511 vtkImageData* Value;
512 bool operator==(vtkTypeUInt64 key) { return this->Key == key; }
513 };
514
515 void ComputeStringBoundsInternal(const vtkUnicodeString& string, float bounds[4]);
516
517 vtkTransform* ProjectionMatrix;
518 vtkTransform* ModelMatrix;
519
520 std::list<vtkMarkerCacheObject> MarkerCache;
521 int MaximumMarkerCacheSize;
522
527 vtkImageData* GenerateMarker(int shape, int size, bool highlight);
528};
529
530#endif // vtkOpenGLContextDevice2D_h
2D array of ids, used for picking.
Abstract class for drawing 2D primitives.
topologically and geometrically regular array of data
Definition: vtkImageData.h:157
a simple class to control print indentation
Definition: vtkIndent.h:113
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:63
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:145
Class for drawing 2D primitives using OpenGL 1.1+.
void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy, float startAngle, float stopAngle) override
Draw an elliptic wedge with center at x, y, outer radii outRx, outRy, inner radii inRx,...
void DrawCircleMarkersGL2PS(bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw the markers as paths/polydata instead of sprites for detailed GL2PS capture.
~vtkOpenGLContextDevice2D() override
void PopMatrix() override
Pop the current matrix off of the stack.
bool HasGLSL()
Check whether the current context device has support for GLSL.
void SetLineType(int type) override
Set the line type type (using anonymous enum in vtkPen).
void DrawPoly(float *f, int n, unsigned char *colors=nullptr, int nc_comps=0) override
Draw a poly line using the points - fastest code path due to memory layout of the coordinates.
void PushMatrix() override
Push the current matrix onto the stack.
int GetNumberOfArcIterations(float rX, float rY, float startAngle, float stopAngle)
Factorized code called by DrawEllipseWedge() and DrawEllipticArc() to figure out the number of iterat...
void CoreDrawTriangles(std::vector< float > &tverts, unsigned char *colors=nullptr, int numComp=0)
void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId) override
Start BufferId creation Mode.
vtkMatrix4x4 * GetModelMatrix()
Get the projection matrix this is needed.
void SetMatrices(vtkShaderProgram *prog)
void DrawImageGL2PS(const vtkRectf &rect, vtkImageData *image)
Embed an RGBA image in the GL2PS output at the supplied point.
void DrawImage(const vtkRectf &pos, vtkImageData *image) override
Draw the supplied image at the given position.
void SetLineWidth(float width) override
Set the line width for glyphs/sprites.
void SetPointSize(float size) override
Set the point size for glyphs/sprites.
virtual void SetColor(unsigned char color[3])
Set the color for the device using unsigned char of length 3, RGB.
void EnableClipping(bool enable) override
Disable clipping of the display.
void DrawCrossMarkersGL2PS(bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw the markers as paths/polydata instead of sprites for detailed GL2PS capture.
void DrawLines(float *f, int n, unsigned char *colors=nullptr, int nc_comps=0) override
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2... The lines will be c...
void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=nullptr, int nc_comps=0) override
Draw a series of point sprites, images centred at the points supplied.
void GetMatrix(vtkMatrix3x3 *m) override
Set the model view matrix for the display.
void SetTexture(vtkImageData *image, int properties=0) override
Set the texture for the device, it is used to fill the polygons.
void DrawString(float *point, const vtkUnicodeString &string) override
Draw some text to the screen.
static vtkOpenGLContextDevice2D * New()
Creates a 2D Painter object.
void DrawColoredPolygon(float *points, int numPoints, unsigned char *colors=nullptr, int nc_comps=0) override
Draw a polygon using the specified number of points.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void End() override
End drawing, clean up the view.
vtkRenderer * Renderer
We need to store a pointer to the renderer for the text rendering.
void DrawMathTextString(float point[2], const vtkStdString &string) override
Draw text using MathText markup for mathematical equations.
void DrawImageGL2PS(float p[2], float scale, vtkImageData *image)
Embed an RGBA image in the GL2PS output at the supplied point.
vtkOpenGLRenderWindow * RenderWindow
The OpenGL render window being used by the device.
void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle) override
Draw an elliptic arc with center at x,y with radii rX and rY between angles startAngle and stopAngle ...
void DrawPolygon(float *, int) override
Draw a polygon using the specified number of points.
void ComputeStringBounds(const vtkUnicodeString &string, float bounds[4]) override
Compute the bounds of the supplied string.
void BuildVBO(vtkOpenGLHelper *cbo, float *v, int nv, unsigned char *coolors, int nc, float *tcoords)
void TransformSize(float &dx, float &dy) const
Transform the width and height from pixels to data units.
void DrawCircleGL2PS(float x, float y, float rX, float rY)
Inject smooth primitives into the GL2PS stream.
void DrawPoints(float *points, int n, unsigned char *colors=nullptr, int nc_comps=0) override
Draw a series of points - fastest code path due to memory layout of the coordinates.
void ComputeStringBounds(const vtkStdString &string, float bounds[4]) override
Compute the bounds of the supplied string.
virtual void ReleaseGraphicsResources(vtkWindow *window)
Release any graphics resources that are being consumed by this device.
void SetMatrix(vtkMatrix3x3 *m) override
Set the model view matrix for the display.
void DrawSquareMarkersGL2PS(bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw the markers as paths/polydata instead of sprites for detailed GL2PS capture.
void DrawQuadStrip(float *points, int n) override
Draws a rectangle.
void DrawImage(float p[2], float scale, vtkImageData *image) override
Draw the supplied image at the given x, y (p[0], p[1]) (bottom corner), scaled by scale (1....
void DrawString(float *point, const vtkStdString &string) override
Draw some text to the screen!
void TransformPath(vtkPath *path) const
Transform the path using the current modelview matrix.
bool SetStringRendererToQt()
Force the use of the Qt based string render strategy.
vtkMatrix4x4 * GetProjectionMatrix()
Get the projection matrix this is needed.
void BufferIdModeEnd() override
Finalize BufferId creation Mode.
void SetClipping(int *x) override
Supply an int array of length 4 with x1, y1, width, height specifying clipping region for the device ...
void DrawMarkers(int shape, bool highlight, float *points, int n, unsigned char *colors=nullptr, int nc_comps=0) override
Draw a series of markers centered at the points supplied.
void DrawWedgeGL2PS(float x, float y, float outRx, float outRy, float inRx, float inRy)
Inject smooth primitives into the GL2PS stream.
void SetColor4(unsigned char color[4]) override
Set the color for the device using unsigned char of length 4, RGBA.
bool SetStringRendererToFreeType()
Force the use of the freetype based render strategy.
void Begin(vtkViewport *viewport) override
Begin drawing, pass in the viewport to set up the view.
void DrawImageGL2PS(float p[2], vtkImageData *image)
Embed an RGBA image in the GL2PS output at the supplied point.
void ComputeJustifiedStringBounds(const char *string, float bounds[4]) override
Compute the bounds of the supplied string while taking into account the justification of the currentl...
void DrawPolyData(float p[2], float scale, vtkPolyData *polyData, vtkUnsignedCharArray *colors, int scalarMode) override
Draw the supplied PolyData at the given x, y (p[0], p[1]) (bottom corner), scaled by scale (1....
void AddEllipseToPath(vtkPath *path, float x, float y, float rx, float ry, bool reverse)
Add an ellipse to a vtkPath.
void DrawPlusMarkersGL2PS(bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw the markers as paths/polydata instead of sprites for detailed GL2PS capture.
void TransformPoint(float &x, float &y) const
Transform the 2D point using the current modelview matrix.
void DrawDiamondMarkersGL2PS(bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw the markers as paths/polydata instead of sprites for detailed GL2PS capture.
void DrawMarkersGL2PS(int shape, bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw the markers as paths/polydata instead of sprites for detailed GL2PS capture.
void DrawQuad(float *points, int n) override
Draws a rectangle.
bool InRender
Is the device currently rendering? Prevent multiple End() calls.
void MultiplyMatrix(vtkMatrix3x3 *m) override
Multiply the current model view matrix by the supplied one.
OpenGL rendering window.
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:33
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
abstract specification for renderers
Definition: vtkRenderer.h:173
The ShaderProgram uses one or more Shader objects.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:105
base class for classes that render supplied text to an image.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
String class that stores Unicode text.
dynamic, self-adjusting array of unsigned char
abstract specification for Viewports
Definition: vtkViewport.h:47
window superclass for vtkRenderWindow
Definition: vtkWindow.h:36
@ point
Definition: vtkX3D.h:242
@ key
Definition: vtkX3D.h:263
@ points
Definition: vtkX3D.h:452
@ startAngle
Definition: vtkX3D.h:492
@ scale
Definition: vtkX3D.h:235
@ type
Definition: vtkX3D.h:522
@ color
Definition: vtkX3D.h:227
@ image
Definition: vtkX3D.h:380
@ size
Definition: vtkX3D.h:259
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)