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 
33 #ifndef vtkOpenGLContextDevice2D_h
34 #define vtkOpenGLContextDevice2D_h
35 
36 #include "vtkRenderingContextOpenGL2Module.h" // For export macro
37 #include "vtkContextDevice2D.h"
38 
39 #include <vector> // STL Header
40 #include <list> // for std::list
41 
42 class vtkMatrix4x4;
44 class vtkOpenGLHelper;
46 class vtkPath;
47 class vtkRenderer;
48 class vtkShaderProgram;
49 class vtkStringToImage;
50 class vtkTransform;
51 class vtkViewport;
52 class vtkWindow;
53 
54 class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
55 {
56 public:
58  virtual void PrintSelf(ostream &os, vtkIndent indent);
59 
64 
70  virtual void DrawPoly(float *f, int n, unsigned char *colors = 0,
71  int nc_comps = 0);
72 
79  virtual void DrawLines(float *f, int n, unsigned char *colors = 0,
80  int nc_comps = 0);
81 
87  virtual void DrawPoints(float *points, int n, unsigned char* colors = 0,
88  int nc_comps = 0);
89 
96  virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n,
97  unsigned char* colors = 0, int nc_comps = 0);
98 
110  virtual void DrawMarkers(int shape, bool highlight, float *points, int n,
111  unsigned char *colors = 0, int nc_comps = 0);
112 
114 
119  vtkSetMacro(MaximumMarkerCacheSize, int)
120  vtkGetMacro(MaximumMarkerCacheSize, int)
122 
126  virtual void DrawQuad(float *points, int n);
127 
131  virtual void DrawQuadStrip(float *points, int n);
132 
136  virtual void DrawPolygon(float *, int);
137 
149  virtual void DrawEllipseWedge(float x, float y, float outRx, float outRy,
150  float inRx, float inRy, float startAngle,
151  float stopAngle);
152 
159  virtual void DrawEllipticArc(float x, float y, float rX, float rY,
160  float startAngle, float stopAngle);
161 
162 
166  virtual void DrawString(float *point, const vtkStdString &string);
167 
176  virtual void ComputeStringBounds(const vtkStdString &string,
177  float bounds[4]);
178 
182  virtual void DrawString(float *point, const vtkUnicodeString &string);
183 
192  virtual void ComputeStringBounds(const vtkUnicodeString &string,
193  float bounds[4]);
194 
200  virtual void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
201 
206  virtual void DrawMathTextString(float point[2], const vtkStdString &string);
207 
212  virtual void DrawImage(float p[2], float scale, vtkImageData *image);
213 
219  void DrawImage(const vtkRectf& pos, vtkImageData *image);
220 
224  virtual void SetColor4(unsigned char color[4]);
225 
229  virtual void SetColor(unsigned char color[3]);
230 
234  virtual void SetTexture(vtkImageData* image, int properties = 0);
235 
239  virtual void SetPointSize(float size);
240 
244  virtual void SetLineWidth(float width);
245 
249  virtual void SetLineType(int type);
250 
254  virtual void MultiplyMatrix(vtkMatrix3x3 *m);
255 
259  virtual void SetMatrix(vtkMatrix3x3 *m);
260 
264  virtual void GetMatrix(vtkMatrix3x3 *m);
265 
269  virtual void PushMatrix();
270 
274  virtual void PopMatrix();
275 
280  virtual void SetClipping(int *x);
281 
285  virtual void EnableClipping(bool enable);
286 
290  virtual void Begin(vtkViewport* viewport);
291 
295  virtual void End();
296 
304  virtual void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId);
305 
313  virtual void BufferIdModeEnd();
314 
320  bool SetStringRendererToFreeType();
321 
326  bool SetStringRendererToQt();
327 
331  bool HasGLSL();
332 
334 
337  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
339 
345  virtual void ReleaseGraphicsResources(vtkWindow *window);
346 
348 
351  vtkMatrix4x4 *GetProjectionMatrix();
352  vtkMatrix4x4 *GetModelMatrix();
354 
355 protected:
358 
366  int GetNumberOfArcIterations(float rX,
367  float rY,
368  float startAngle,
369  float stopAngle);
370 
374  int Geometry[2];
375 
379  vtkRenderer *Renderer;
380 
384  vtkStringToImage *TextRenderer;
385 
389  bool InRender;
390 
392 
395  class Private;
396  Private *Storage;
398 
402  vtkOpenGLRenderWindow* RenderWindow;
403 
404  vtkOpenGLHelper *LinesCBO; // vertex + color
405  void ReadyLinesCBOProgram();
406  vtkOpenGLHelper *LinesBO; // vertex
407  void ReadyLinesBOProgram();
408  vtkOpenGLHelper *VCBO; // vertex + color
409  void ReadyVCBOProgram();
410  vtkOpenGLHelper *VBO; // vertex
411  void ReadyVBOProgram();
412  vtkOpenGLHelper *VTBO; // vertex + tcoord
413  void ReadyVTBOProgram();
414  vtkOpenGLHelper *SCBO; // sprite + color
415  void ReadySCBOProgram();
416  vtkOpenGLHelper *SBO; // sprite
417  void ReadySBOProgram();
418 
419  void SetMatrices(vtkShaderProgram *prog);
420  void BuildVBO(vtkOpenGLHelper *cbo,
421  float *v, int nv,
422  unsigned char *coolors, int nc,
423  float *tcoords);
424  void CoreDrawTriangles(std::vector<float> &tverts);
425 
426  // used for stipples
427  unsigned short LinePattern;
428 
430 
434  void DrawMarkersGL2PS(int shape, bool highlight, float *points, int n,
435  unsigned char *colors, int nc_comps);
436  void DrawCrossMarkersGL2PS(bool highlight, float *points, int n,
437  unsigned char *colors, int nc_comps);
438  void DrawPlusMarkersGL2PS(bool highlight, float *points, int n,
439  unsigned char *colors, int nc_comps);
440  void DrawSquareMarkersGL2PS(bool highlight, float *points, int n,
441  unsigned char *colors, int nc_comps);
442  void DrawCircleMarkersGL2PS(bool highlight, float *points, int n,
443  unsigned char *colors, int nc_comps);
444  void DrawDiamondMarkersGL2PS(bool highlight, float *points, int n,
445  unsigned char *colors, int nc_comps);
447 
449 
452  void DrawImageGL2PS(float p[2], vtkImageData *image);
453  void DrawImageGL2PS(float p[2], float scale, vtkImageData *image);
454  void DrawImageGL2PS(const vtkRectf &rect, vtkImageData *image);
456 
458 
461  void DrawCircleGL2PS(float x, float y, float rX, float rY);
462  void DrawWedgeGL2PS(float x, float y, float outRx, float outRy,
463  float inRx, float inRy);
465 
469  void DrawMathTextStringGL2PS(float point[2], const vtkStdString &string);
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 
496  void AlignText(double orientation, float width, float height, float *p);
497 
504  vtkImageData *GetMarker(int shape, int size, bool highlight);
505 
506  class vtkMarkerCacheObject
507  {
508  public:
509  vtkTypeUInt64 Key;
510  vtkImageData *Value;
511  bool operator==(vtkTypeUInt64 key)
512  {
513  return this->Key == key;
514  }
515  };
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 
531 #endif //vtkOpenGLContextDevice2D_h
vtkOpenGLContextDevice2D::Private
Definition: vtkOpenGLContextDevice2DPrivate.h:251
vtkOpenGLContextDevice2D::DrawPoints
virtual void DrawPoints(float *points, int n, unsigned char *colors=0, int nc_comps=0)
Draw a series of points - fastest code path due to memory layout of the coordinates.
vtkX3D::vector
@ vector
Definition: vtkX3D.h:237
vtkX3D::scale
@ scale
Definition: vtkX3D.h:229
vtkX3D::type
@ type
Definition: vtkX3D.h:516
vtkOpenGLContextDevice2D::DrawLines
virtual void DrawLines(float *f, int n, unsigned char *colors=0, int nc_comps=0)
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2...
vtkX3D::key
@ key
Definition: vtkX3D.h:257
vtkX3D::image
@ image
Definition: vtkX3D.h:374
vtkPath
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:36
vtkOpenGLContextDevice2D::DrawPointSprites
virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=0, int nc_comps=0)
Draw a series of point sprites, images centred at the points supplied.
vtkStringToImage
base class for classes that render supplied text to an image.
Definition: vtkStringToImage.h:38
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
vtkMatrix3x3
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:37
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:35
vtkAbstractContextBufferId
2D array of ids, used for picking.
Definition: vtkAbstractContextBufferId.h:47
vtkX3D::color
@ color
Definition: vtkX3D.h:221
vtkX3D::points
@ points
Definition: vtkX3D.h:446
vtkOpenGLContextDevice2D::PrintSelf
virtual void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
vtkX3D::point
@ point
Definition: vtkX3D.h:236
vtkOpenGLExtensionManager
Interface class for querying and using OpenGL extensions.
vtkX3D::height
@ height
Definition: vtkX3D.h:254
vtkOpenGLContextDevice2D
Class for drawing 2D primitives using OpenGL 1.1+.
Definition: vtkOpenGLContextDevice2D.h:46
vtkShaderProgram
The ShaderProgram uses one or more Shader objects.
Definition: vtkShaderProgram.h:45
vtkOpenGLHelper
Definition: vtkOpenGLHelper.h:31
vtkImageData
topologically and geometrically regular array of data
Definition: vtkImageData.h:46
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:42
vtkUnicodeString
String class that stores Unicode text.
Definition: vtkUnicodeString.h:73
vtkOpenGLContextDevice2D::DrawMarkers
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.
vtkX3D::size
@ size
Definition: vtkX3D.h:253
vtkX3D::startAngle
@ startAngle
Definition: vtkX3D.h:486
operator==
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)
vtkViewport
abstract specification for Viewports
Definition: vtkViewport.h:48
vtkContextDevice2D
Abstract class for drawing 2D primitives.
Definition: vtkContextDevice2D.h:49
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkOpenGLContextDevice2D::DrawPoly
virtual void DrawPoly(float *f, int n, unsigned char *colors=0, int nc_comps=0)
Draw a poly line using the points - fastest code path due to memory layout of the coordinates.
vtkX3D::orientation
@ orientation
Definition: vtkX3D.h:262
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:64
vtkOpenGLContextDevice2D::New
static vtkOpenGLContextDevice2D * New()
Creates a 2D Painter object.
vtkOpenGLRenderWindow
OpenGL rendering window.
Definition: vtkOpenGLRenderWindow.h:39
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:49
vtkRectf
Definition: vtkRect.h:297
vtkContextDevice2D.h