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  virtual void PrintSelf(ostream &os, vtkIndent indent);
56 
60  static vtkOpenGLContextDevice2D *New();
61 
67  virtual void DrawPoly(float *f, int n, unsigned char *colors = 0,
68  int nc_comps = 0);
69 
76  virtual void DrawLines(float *f, int n, unsigned char *colors = 0,
77  int nc_comps = 0);
78 
84  virtual void DrawPoints(float *points, int n, unsigned char* colors = 0,
85  int nc_comps = 0);
86 
93  virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n,
94  unsigned char* colors = 0, int nc_comps = 0);
95 
107  virtual void DrawMarkers(int shape, bool highlight, float *points, int n,
108  unsigned char *colors = 0, int nc_comps = 0);
109 
111 
116  vtkSetMacro(MaximumMarkerCacheSize, int)
117  vtkGetMacro(MaximumMarkerCacheSize, int)
119 
123  virtual void DrawQuad(float *points, int n);
124 
128  virtual void DrawQuadStrip(float *points, int n);
129 
133  virtual void DrawPolygon(float *, int);
134 
146  virtual void DrawEllipseWedge(float x, float y, float outRx, float outRy,
147  float inRx, float inRy, float startAngle,
148  float stopAngle);
149 
156  virtual void DrawEllipticArc(float x, float y, float rX, float rY,
157  float startAngle, float stopAngle);
158 
159 
163  virtual void DrawString(float *point, const vtkStdString &string);
164 
173  virtual void ComputeStringBounds(const vtkStdString &string,
174  float bounds[4]);
175 
179  virtual void DrawString(float *point, const vtkUnicodeString &string);
180 
189  virtual void ComputeStringBounds(const vtkUnicodeString &string,
190  float bounds[4]);
191 
197  virtual void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
198 
203  virtual void DrawMathTextString(float point[2], const vtkStdString &string);
204 
209  virtual void DrawImage(float p[2], float scale, vtkImageData *image);
210 
216  void DrawImage(const vtkRectf& pos, vtkImageData *image);
217 
221  virtual void SetColor4(unsigned char color[4]);
222 
226  virtual void SetColor(unsigned char color[3]);
227 
231  virtual void SetTexture(vtkImageData* image, int properties = 0);
232 
236  virtual void SetPointSize(float size);
237 
241  virtual void SetLineWidth(float width);
242 
246  virtual void SetLineType(int type);
247 
251  virtual void MultiplyMatrix(vtkMatrix3x3 *m);
252 
256  virtual void SetMatrix(vtkMatrix3x3 *m);
257 
261  virtual void GetMatrix(vtkMatrix3x3 *m);
262 
266  virtual void PushMatrix();
267 
271  virtual void PopMatrix();
272 
277  virtual void SetClipping(int *x);
278 
282  virtual void EnableClipping(bool enable);
283 
287  virtual void Begin(vtkViewport* viewport);
288 
292  virtual void End();
293 
301  virtual void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId);
302 
310  virtual void BufferIdModeEnd();
311 
317  bool SetStringRendererToFreeType();
318 
323  bool SetStringRendererToQt();
324 
328  bool HasGLSL();
329 
331 
334  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
336 
342  virtual void ReleaseGraphicsResources(vtkWindow *window);
343 
345 
348  vtkMatrix4x4 *GetProjectionMatrix();
349  vtkMatrix4x4 *GetModelMatrix();
351 
352 protected:
354  virtual ~vtkOpenGLContextDevice2D();
355 
363  int GetNumberOfArcIterations(float rX,
364  float rY,
365  float startAngle,
366  float stopAngle);
367 
371  int Geometry[2];
372 
376  vtkRenderer *Renderer;
377 
381  vtkStringToImage *TextRenderer;
382 
386  bool InRender;
387 
389 
392  class Private;
393  Private *Storage;
395 
399  vtkOpenGLRenderWindow* RenderWindow;
400 
401  vtkOpenGLHelper *LinesCBO; // vertex + color
402  void ReadyLinesCBOProgram();
403  vtkOpenGLHelper *LinesBO; // vertex
404  void ReadyLinesBOProgram();
405  vtkOpenGLHelper *VCBO; // vertex + color
406  void ReadyVCBOProgram();
407  vtkOpenGLHelper *VBO; // vertex
408  void ReadyVBOProgram();
409  vtkOpenGLHelper *VTBO; // vertex + tcoord
410  void ReadyVTBOProgram();
411  vtkOpenGLHelper *SCBO; // sprite + color
412  void ReadySCBOProgram();
413  vtkOpenGLHelper *SBO; // sprite
414  void ReadySBOProgram();
415 
416  void SetMatrices(vtkShaderProgram *prog);
417  void BuildVBO(vtkOpenGLHelper *cbo,
418  float *v, int nv,
419  unsigned char *coolors, int nc,
420  float *tcoords);
421  void CoreDrawTriangles(std::vector<float> &tverts);
422 
423  // used for stipples
424  unsigned short LinePattern;
425 
427 
431  void DrawMarkersGL2PS(int shape, bool highlight, float *points, int n,
432  unsigned char *colors, int nc_comps);
433  void DrawCrossMarkersGL2PS(bool highlight, float *points, int n,
434  unsigned char *colors, int nc_comps);
435  void DrawPlusMarkersGL2PS(bool highlight, float *points, int n,
436  unsigned char *colors, int nc_comps);
437  void DrawSquareMarkersGL2PS(bool highlight, float *points, int n,
438  unsigned char *colors, int nc_comps);
439  void DrawCircleMarkersGL2PS(bool highlight, float *points, int n,
440  unsigned char *colors, int nc_comps);
441  void DrawDiamondMarkersGL2PS(bool highlight, float *points, int n,
442  unsigned char *colors, int nc_comps);
444 
446 
449  void DrawImageGL2PS(float p[2], vtkImageData *image);
450  void DrawImageGL2PS(float p[2], float scale, vtkImageData *image);
451  void DrawImageGL2PS(const vtkRectf &rect, vtkImageData *image);
453 
455 
458  void DrawCircleGL2PS(float x, float y, float rX, float rY);
459  void DrawWedgeGL2PS(float x, float y, float outRx, float outRy,
460  float inRx, float inRy);
462 
466  void DrawMathTextStringGL2PS(float point[2], const vtkStdString &string);
467 
471  void AddEllipseToPath(vtkPath *path, float x, float y, float rx, float ry,
472  bool reverse);
473 
477  void TransformPath(vtkPath *path) const;
478 
482  void TransformPoint(float &x, float &y) const;
483 
487  void TransformSize(float &dx, float &dy) const;
488 
489 private:
490  vtkOpenGLContextDevice2D(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
491  void operator=(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
492 
493  void AlignText(double orientation, float width, float height, float *p);
494 
501  vtkImageData *GetMarker(int shape, int size, bool highlight);
502 
503  class vtkMarkerCacheObject
504  {
505  public:
506  vtkTypeUInt64 Key;
507  vtkImageData *Value;
508  bool operator==(vtkTypeUInt64 key)
509  {
510  return this->Key == key;
511  }
512  };
513 
514  vtkTransform *ProjectionMatrix;
515  vtkTransform *ModelMatrix;
516 
517  std::list<vtkMarkerCacheObject> MarkerCache;
518  int MaximumMarkerCacheSize;
519 
524  vtkImageData * GenerateMarker(int shape, int size, bool highlight);
525 
526 };
527 
528 #endif //vtkOpenGLContextDevice2D_h
OpenGL rendering window.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:47
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:41
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:35
abstract specification for Viewports
Definition: vtkViewport.h:47
Class for drawing 2D primitives using OpenGL 1.1+.
abstract specification for renderers
Definition: vtkRenderer.h:63
static vtkContextDevice2D * New()
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:60
virtual void DrawPoints(float *points, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw a series of points - fastest code path due to memory layout of the coordinates.
virtual void DrawMarkers(int shape, bool highlight, float *points, int n, unsigned char *colors=0, int nc_comps=0)
Draw a series of markers centered at the points supplied.
base class for classes that render supplied text to an image.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
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:39
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
Abstract class for drawing 2D primitives.
Interface class for querying and using OpenGL extensions.
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
vtkWeakPointer< vtkRenderWindow > RenderWindow
2D array of ids, used for picking.
virtual void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:36
virtual void DrawLines(float *f, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2... ...
virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw a series of point sprites, images centred at the points supplied.
String class that stores Unicode text.
The ShaderProgram uses one or more Shader objects.