VTK
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 
30 #ifndef vtkOpenGLContextDevice2D_h
31 #define vtkOpenGLContextDevice2D_h
32 
33 #include "vtkRenderingContextOpenGL2Module.h" // For export macro
34 #include "vtkContextDevice2D.h"
35 
36 #include <vector> // STL Header
37 #include <list> // for std::list
38 
39 class vtkMatrix4x4;
41 class vtkOpenGLHelper;
43 class vtkPath;
44 class vtkRenderer;
45 class vtkShaderProgram;
46 class vtkStringToImage;
47 class vtkTransform;
48 class vtkViewport;
49 class vtkWindow;
50 
51 class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
52 {
53 public:
55  void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE;
56 
60  static vtkOpenGLContextDevice2D *New();
61 
67  void DrawPoly(float *f, int n, unsigned char *colors = 0,
68  int nc_comps = 0) VTK_OVERRIDE;
69 
76  void DrawLines(float *f, int n, unsigned char *colors = 0,
77  int nc_comps = 0) VTK_OVERRIDE;
78 
84  void DrawPoints(float *points, int n, unsigned char* colors = 0,
85  int nc_comps = 0) VTK_OVERRIDE;
86 
93  void DrawPointSprites(vtkImageData *sprite, float *points, int n,
94  unsigned char* colors = 0, int nc_comps = 0) VTK_OVERRIDE;
95 
107  void DrawMarkers(int shape, bool highlight, float *points, int n,
108  unsigned char *colors = 0, int nc_comps = 0) VTK_OVERRIDE;
109 
111 
116  vtkSetMacro(MaximumMarkerCacheSize, int)
117  vtkGetMacro(MaximumMarkerCacheSize, int)
119 
123  void DrawQuad(float *points, int n) VTK_OVERRIDE;
124 
128  void DrawQuadStrip(float *points, int n) VTK_OVERRIDE;
129 
133  void DrawPolygon(float *, int) VTK_OVERRIDE;
134  void DrawColoredPolygon(float *points, int numPoints,
135  unsigned char *colors = nullptr,
136  int nc_comps = 0) VTK_OVERRIDE;
137 
149  void DrawEllipseWedge(float x, float y, float outRx, float outRy,
150  float inRx, float inRy, float startAngle,
151  float stopAngle) VTK_OVERRIDE;
152 
159  void DrawEllipticArc(float x, float y, float rX, float rY,
160  float startAngle, float stopAngle) VTK_OVERRIDE;
161 
162 
166  void DrawString(float *point, const vtkStdString &string) VTK_OVERRIDE;
167 
176  void ComputeStringBounds(const vtkStdString &string,
177  float bounds[4]) VTK_OVERRIDE;
178 
182  void DrawString(float *point, const vtkUnicodeString &string) VTK_OVERRIDE;
183 
192  void ComputeStringBounds(const vtkUnicodeString &string,
193  float bounds[4]) VTK_OVERRIDE;
194 
200  void ComputeJustifiedStringBounds(const char* string, float bounds[4]) VTK_OVERRIDE;
201 
206  void DrawMathTextString(float point[2], const vtkStdString &string) VTK_OVERRIDE;
207 
212  void DrawImage(float p[2], float scale, vtkImageData *image) VTK_OVERRIDE;
213 
219  void DrawImage(const vtkRectf& pos, vtkImageData *image) VTK_OVERRIDE;
220 
225  void DrawPolyData(float p[2], float scale, vtkPolyData* polyData,
226  vtkUnsignedCharArray* colors, int scalarMode) VTK_OVERRIDE;
227 
231  void SetColor4(unsigned char color[4]) VTK_OVERRIDE;
232 
236  virtual void SetColor(unsigned char color[3]);
237 
241  void SetTexture(vtkImageData* image, int properties = 0) VTK_OVERRIDE;
242 
246  void SetPointSize(float size) VTK_OVERRIDE;
247 
251  void SetLineWidth(float width) VTK_OVERRIDE;
252 
256  void SetLineType(int type) VTK_OVERRIDE;
257 
261  void MultiplyMatrix(vtkMatrix3x3 *m) VTK_OVERRIDE;
262 
266  void SetMatrix(vtkMatrix3x3 *m) VTK_OVERRIDE;
267 
271  void GetMatrix(vtkMatrix3x3 *m) VTK_OVERRIDE;
272 
276  void PushMatrix() VTK_OVERRIDE;
277 
281  void PopMatrix() VTK_OVERRIDE;
282 
287  void SetClipping(int *x) VTK_OVERRIDE;
288 
292  void EnableClipping(bool enable) VTK_OVERRIDE;
293 
297  void Begin(vtkViewport* viewport) VTK_OVERRIDE;
298 
302  void End() VTK_OVERRIDE;
303 
311  void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId) VTK_OVERRIDE;
312 
320  void BufferIdModeEnd() VTK_OVERRIDE;
321 
327  bool SetStringRendererToFreeType();
328 
333  bool SetStringRendererToQt();
334 
338  bool HasGLSL();
339 
341 
344  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
346 
352  virtual void ReleaseGraphicsResources(vtkWindow *window);
353 
355 
358  vtkMatrix4x4 *GetProjectionMatrix();
359  vtkMatrix4x4 *GetModelMatrix();
361 
362 protected:
364  ~vtkOpenGLContextDevice2D() VTK_OVERRIDE;
365 
373  int GetNumberOfArcIterations(float rX,
374  float rY,
375  float startAngle,
376  float stopAngle);
377 
381  int Geometry[2];
382 
386  vtkRenderer *Renderer;
387 
391  bool InRender;
392 
394 
397  class Private;
398  Private *Storage;
399 
401  CellArrayHelper* PolyDataImpl;
403 
407  vtkOpenGLRenderWindow* RenderWindow;
408 
409  vtkOpenGLHelper *LinesCBO; // vertex + color
410  void ReadyLinesCBOProgram();
411  vtkOpenGLHelper *LinesBO; // vertex
412  void ReadyLinesBOProgram();
413  vtkOpenGLHelper *VCBO; // vertex + color
414  void ReadyVCBOProgram();
415  vtkOpenGLHelper *VBO; // vertex
416  void ReadyVBOProgram();
417  vtkOpenGLHelper *VTBO; // vertex + tcoord
418  void ReadyVTBOProgram();
419  vtkOpenGLHelper *SCBO; // sprite + color
420  void ReadySCBOProgram();
421  vtkOpenGLHelper *SBO; // sprite
422  void ReadySBOProgram();
423 
424  void SetMatrices(vtkShaderProgram *prog);
425  void BuildVBO(vtkOpenGLHelper *cbo,
426  float *v, int nv,
427  unsigned char *coolors, int nc,
428  float *tcoords);
429  void CoreDrawTriangles(std::vector<float> &tverts, unsigned char* colors = NULL,
430  int numComp = 0);
431  // used for stipples
432  unsigned short LinePattern;
433 
435 
439  void DrawMarkersGL2PS(int shape, bool highlight, float *points, int n,
440  unsigned char *colors, int nc_comps);
441  void DrawCrossMarkersGL2PS(bool highlight, float *points, int n,
442  unsigned char *colors, int nc_comps);
443  void DrawPlusMarkersGL2PS(bool highlight, float *points, int n,
444  unsigned char *colors, int nc_comps);
445  void DrawSquareMarkersGL2PS(bool highlight, float *points, int n,
446  unsigned char *colors, int nc_comps);
447  void DrawCircleMarkersGL2PS(bool highlight, float *points, int n,
448  unsigned char *colors, int nc_comps);
449  void DrawDiamondMarkersGL2PS(bool highlight, float *points, int n,
450  unsigned char *colors, int nc_comps);
452 
454 
457  void DrawImageGL2PS(float p[2], vtkImageData *image);
458  void DrawImageGL2PS(float p[2], float scale, vtkImageData *image);
459  void DrawImageGL2PS(const vtkRectf &rect, vtkImageData *image);
461 
463 
466  void DrawCircleGL2PS(float x, float y, float rX, float rY);
467  void DrawWedgeGL2PS(float x, float y, float outRx, float outRy,
468  float inRx, float inRy);
470 
474  void AddEllipseToPath(vtkPath *path, float x, float y, float rx, float ry,
475  bool reverse);
476 
480  void TransformPath(vtkPath *path) const;
481 
485  void TransformPoint(float &x, float &y) const;
486 
490  void TransformSize(float &dx, float &dy) const;
491 
492 private:
493  vtkOpenGLContextDevice2D(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
494  void operator=(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
495 
502  vtkImageData *GetMarker(int shape, int size, bool highlight);
503 
504  class vtkMarkerCacheObject
505  {
506  public:
507  vtkTypeUInt64 Key;
508  vtkImageData *Value;
509  bool operator==(vtkTypeUInt64 key)
510  {
511  return this->Key == key;
512  }
513  };
514 
515  void ComputeStringBoundsInternal(const vtkUnicodeString &string,
516  float bounds[4]);
517 
518  vtkTransform *ProjectionMatrix;
519  vtkTransform *ModelMatrix;
520 
521  std::list<vtkMarkerCacheObject> MarkerCache;
522  int MaximumMarkerCacheSize;
523 
528  vtkImageData * GenerateMarker(int shape, int size, bool highlight);
529 
530 };
531 
532 #endif //vtkOpenGLContextDevice2D_h
OpenGL rendering window.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:41
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:35
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:32
abstract specification for Viewports
Definition: vtkViewport.h:44
Class for drawing 2D primitives using OpenGL 1.1+.
abstract specification for renderers
Definition: vtkRenderer.h:57
static vtkContextDevice2D * New()
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
base class for classes that render supplied text to an image.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
virtual void DrawPoly(float *points, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw a poly line using the points - fastest code path due to memory layout of the coordinates...
a simple class to control print indentation
Definition: vtkIndent.h:33
topologically and geometrically regular array of data
Definition: vtkImageData.h:39
Abstract class for drawing 2D primitives.
Interface class for querying and using OpenGL extensions.
dynamic, self-adjusting array of unsigned char
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
vtkWeakPointer< vtkRenderWindow > RenderWindow
2D array of ids, used for picking.
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:33
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
String class that stores Unicode text.
The ShaderProgram uses one or more Shader objects.