VTK  9.7.20260917
vtkOpenGLContextDevice2D.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
20
21#ifndef vtkOpenGLContextDevice2D_h
22#define vtkOpenGLContextDevice2D_h
23
24#include "vtkContextDevice2D.h"
25#include "vtkRenderingContextOpenGL2Module.h" // For export macro
26
27#include <cstdint> // For std::uintptr_t
28#include <list> // For std::list
29#include <vector> // For std::vector
30
31VTK_ABI_NAMESPACE_BEGIN
32class vtkMatrix4x4;
33class vtkOpenGLExtensionManager;
34class vtkOpenGLHelper;
36class vtkPath;
37class vtkRenderer;
40class vtkTransform;
42class vtkViewport;
43class vtkWindow;
45
46class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
47{
48public:
50 void PrintSelf(ostream& os, vtkIndent indent) override;
51
56
62 void DrawPoly(float* f, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
63
70 void DrawLines(float* f, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
71
77 void DrawPoints(float* points, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
79 vtkDataArray* positions, vtkUnsignedCharArray* colors, std::uintptr_t cacheIdentifier) override;
80
87 void DrawPointSprites(vtkImageData* sprite, float* points, int n, unsigned char* colors = nullptr,
88 int nc_comps = 0) override;
90 std::uintptr_t cacheIdentifier) override;
91
107 void DrawMarkers(int shape, bool highlight, float* points, int n, unsigned char* colors = nullptr,
108 int nc_comps = 0) override;
109 void DrawMarkers(int shape, bool highlight, vtkDataArray* positions, vtkUnsignedCharArray* colors,
110 std::uintptr_t cacheIdentifier) override;
111
113
118 vtkSetMacro(MaximumMarkerCacheSize, int);
119 vtkGetMacro(MaximumMarkerCacheSize, int);
121
123
128 vtkSetMacro(SmoothMarkers, bool);
129 vtkGetMacro(SmoothMarkers, bool);
130 vtkBooleanMacro(SmoothMarkers, bool);
132
136 void DrawQuad(float* points, int n) override;
137
141 void DrawQuadStrip(float* points, int n) override;
142
146 void DrawPolygon(float*, int) override;
148 float* points, int numPoints, unsigned char* colors = nullptr, int nc_comps = 0) override;
149
161 void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
162 float startAngle, float stopAngle) override;
163
171 float x, float y, float rX, float rY, float startAngle, float stopAngle) override;
172
176 void DrawString(float* point, const vtkStdString& string) override;
177
186 void ComputeStringBounds(const vtkStdString& string, float bounds[4]) override;
187
193 void ComputeJustifiedStringBounds(const char* string, float bounds[4]) override;
194
199 void DrawMathTextString(float point[2], const vtkStdString& string) override;
200
205 void DrawImage(float p[2], float scale, vtkImageData* image) override;
206
212 void DrawImage(const vtkRectf& pos, vtkImageData* image) override;
213
218 void DrawPolyData(float p[2], float scale, vtkPolyData* polyData, vtkUnsignedCharArray* colors,
219 int scalarMode) override;
220
224 void SetColor4(unsigned char color[4]) override;
225
229 virtual void SetColor(unsigned char color[3]);
230
234 void SetTexture(vtkImageData* image, int properties = 0) override;
235
239 void SetPointSize(float size) override;
240
244 void SetLineWidth(float width) override;
245
249 void SetLineType(int type) override;
250
254 void MultiplyMatrix(vtkMatrix3x3* m) override;
255
259 void SetMatrix(vtkMatrix3x3* m) override;
260
264 void GetMatrix(vtkMatrix3x3* m) override;
265
269 void PushMatrix() override;
270
274 void PopMatrix() override;
275
276 /*
277 * Supply an int array of length 4 with x1, y1, width, height specifying
278 * clipping region for the device in pixels.
279 */
280 void SetClipping(int* x) override;
281
285 void EnableClipping(bool enable) override;
286
290 void Begin(vtkViewport* viewport) override;
291
295 void End() override;
296
305
313 void BufferIdModeEnd() override;
314
321
327
331 bool HasGLSL();
332
334
339
345 virtual void ReleaseGraphicsResources(vtkWindow* window);
346
348
354
355protected:
358
366 int GetNumberOfArcIterations(float rX, float rY, float startAngle, float stopAngle);
367
372
376 bool InRender = false;
377
379
382 class Private;
384
385 class CellArrayHelper;
388
393
394 vtkOpenGLHelper* LinesCBO; // vertex + color
398 vtkOpenGLHelper* VCBO; // vertex + color
402 vtkOpenGLHelper* VTBO; // vertex + tcoord
404 vtkOpenGLHelper* SCBO; // sprite + color
408
411 vtkOpenGLHelper* cbo, float* v, int nv, unsigned char* coolors, int nc, float* tcoords);
413 std::vector<float>& tverts, unsigned char* colors = nullptr, int numComp = 0);
414 // used for stipples
415 unsigned short LinePattern = 0xFFFF;
416
418
423 int shape, bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
425 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
427 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
429 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
431 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
433 bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
435
437
440 void DrawImageGL2PS(float p[2], vtkImageData* image);
441 void DrawImageGL2PS(float p[2], float scale, vtkImageData* image);
442 void DrawImageGL2PS(const vtkRectf& rect, vtkImageData* image);
444
446
449 void DrawCircleGL2PS(float x, float y, float rX, float rY);
450 void DrawWedgeGL2PS(float x, float y, float outRx, float outRy, float inRx, float inRy);
452
456 void AddEllipseToPath(vtkPath* path, float x, float y, float rx, float ry, bool reverse);
457
461 void TransformPath(vtkPath* path) const;
462
466 void TransformPoint(float& x, float& y) const;
467
471 void TransformSize(float& dx, float& dy) const;
472
476 void ReleaseCache(std::uintptr_t cacheIdentifier) override;
477
478private:
480 void operator=(const vtkOpenGLContextDevice2D&) = delete;
481
488 vtkImageData* GetMarker(int shape, int size, bool highlight);
489
490 class vtkMarkerCacheObject
491 {
492 public:
493 vtkTypeUInt64 Key;
494 vtkImageData* Value;
495 bool operator==(vtkTypeUInt64 key) { return this->Key == key; }
496 };
497
498 void ComputeStringBoundsInternal(const std::string& string, float bounds[4]);
499
500 vtkTransform* ProjectionMatrix;
501 vtkTransform* ModelMatrix;
502
503 std::list<vtkMarkerCacheObject> MarkerCache;
504 int MaximumMarkerCacheSize = 20;
505 bool SmoothMarkers = false;
506
511 vtkImageData* GenerateMarker(int shape, int size, bool highlight);
512};
513
514VTK_ABI_NAMESPACE_END
515#endif // vtkOpenGLContextDevice2D_h
2D array of ids, used for picking.
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:108
represent and manipulate 3x3 transformation matrices
represent and manipulate 4x4 transformation matrices
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.
void ReleaseCache(std::uintptr_t cacheIdentifier) override
Ask the buffer object builder to erase cache entry for given identifier.
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.
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 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 DrawPointSprites(vtkImageData *sprite, vtkDataArray *positions, vtkUnsignedCharArray *colors, std::uintptr_t cacheIdentifier) override
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 DrawMarkers(int shape, bool highlight, vtkDataArray *positions, vtkUnsignedCharArray *colors, std::uintptr_t cacheIdentifier) override
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?
void MultiplyMatrix(vtkMatrix3x3 *m) override
Multiply the current model view matrix by the supplied one.
void DrawPoints(vtkDataArray *positions, vtkUnsignedCharArray *colors, std::uintptr_t cacheIdentifier) override
Internal buffer object builder that maintains a cache of VBO groups.
OpenGL rendering window.
concrete dataset representing a path defined by Bezier curves.
Definition vtkPath.h:44
concrete dataset represents vertices, lines, polygons, and triangle strips
abstract specification for renderers
The ShaderProgram uses one or more Shader objects.
Wrapper around std::string to keep symbols short.
base class for classes that render supplied text to an image.
describes linear transformations via a 4x4 matrix
dynamic, self-adjusting array of unsigned char
abstract specification for Viewports
Definition vtkViewport.h:66
window superclass for vtkRenderWindow
Definition vtkWindow.h:62
#define vtkDataArray
bool VTKCOMMONCORE_EXPORT operator==(const std::string &a, const vtkStringToken &b)