VTK
vtkOpenGLRenderWindow.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkOpenGLRenderWindow.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=========================================================================*/
25#ifndef vtkOpenGLRenderWindow_h
26#define vtkOpenGLRenderWindow_h
27
28#include "vtkRenderingOpenGL2Module.h" // For export macro
29#include "vtkRenderWindow.h"
30#include <string> // for ivar
31#include <map> // for ivar
32#include <set> // for ivar
33#include "vtkType.h" // for ivar
34
35class vtkIdList;
40class vtkStdString;
41class vtkTexture;
45
46class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLRenderWindow : public vtkRenderWindow
47{
48public:
50 void PrintSelf(ostream& os, vtkIndent indent);
51
55 virtual const char *GetRenderingBackend();
56
58
64
68 virtual void StereoUpdate();
69
71
74 virtual unsigned char *GetPixelData(int x,int y,int x2,int y2,int front);
75 virtual int GetPixelData(int x,int y,int x2,int y2, int front,
77 virtual int SetPixelData(int x,int y,int x2,int y2,unsigned char *data,
78 int front);
79 virtual int SetPixelData(int x,int y,int x2,int y2,
80 vtkUnsignedCharArray *data, int front);
82
84
87 virtual float *GetRGBAPixelData(int x,int y,int x2,int y2,int front);
88 virtual int GetRGBAPixelData(int x,int y,int x2,int y2, int front,
90 virtual int SetRGBAPixelData(int x,int y,int x2,int y2, float *data,
91 int front, int blend=0);
92 virtual int SetRGBAPixelData(int x,int y,int x2,int y2, vtkFloatArray *data,
93 int front, int blend=0);
94 virtual void ReleaseRGBAPixelData(float *data);
95 virtual unsigned char *GetRGBACharPixelData(int x,int y,int x2,int y2,
96 int front);
97 virtual int GetRGBACharPixelData(int x,int y,int x2,int y2, int front,
99 virtual int SetRGBACharPixelData(int x, int y, int x2, int y2,
100 unsigned char *data, int front,
101 int blend=0);
102 virtual int SetRGBACharPixelData(int x,int y,int x2,int y2,
103 vtkUnsignedCharArray *data, int front,
104 int blend=0);
106
108
111 virtual float *GetZbufferData( int x1, int y1, int x2, int y2 );
112 virtual int GetZbufferData( int x1, int y1, int x2, int y2, float* z );
113 virtual int GetZbufferData( int x1, int y1, int x2, int y2,
114 vtkFloatArray* z );
115 virtual int SetZbufferData( int x1, int y1, int x2, int y2, float *buffer );
116 virtual int SetZbufferData( int x1, int y1, int x2, int y2,
117 vtkFloatArray *buffer );
119
120
125
130
135
140
145 int GetColorBufferSizes(int *rgba);
146
148
151 virtual void SetSize(int a[2]);
152 virtual void SetSize(int,int);
154
158 virtual void OpenGLInit();
159
160 // Initialize the state of OpenGL that VTK wants for this window
161 virtual void OpenGLInitState();
162
163 // Initialize VTK for rendering in a new OpenGL context
164 virtual void OpenGLInitContext();
165
167
173
179 void GetOpenGLVersion(int &major, int &minor);
180
188 unsigned int GetBackLeftBuffer();
189
197 unsigned int GetBackRightBuffer();
198
206 unsigned int GetFrontLeftBuffer();
207
215 unsigned int GetFrontRightBuffer();
216
224 unsigned int GetBackBuffer();
225
233 unsigned int GetFrontBuffer();
234
239
241
244 vtkGetObjectMacro(ShaderCache,vtkOpenGLShaderCache);
246
248
251 vtkGetMacro(FrameBufferObject, unsigned int);
253
259
264 virtual void WaitForCompletion();
265
269 virtual void DrawPixels(int x1, int y1, int x2, int y2,
270 int numComponents, int dataType, void *data);
271
276 virtual void DrawPixels(
277 int dstXmin, int dstYmin, int dstXmax, int dstYmax,
278 int srcXmin, int srcYmin, int srcXmax, int srcYmax,
279 int srcWidth, int srcHeight, int numComponents, int dataType, void *data);
280
285 virtual void DrawPixels(
286 int srcWidth, int srcHeight, int numComponents, int dataType, void *data);
287
292 return this->MaximumHardwareLineWidth; };
293
301 {
302 return 0;
303 }
304
311 int vtktype, int numComponents,
312 bool needInteger, bool needFloat);
313
320 {
321 return this->OpenGLSupportMessage;
322 }
323
324 // Create and bind offscreen rendering buffers without destroying the current
325 // OpenGL context. This allows to temporary switch to offscreen rendering
326 // (ie. to make a screenshot even if the window is hidden).
327 // Return if the creation was successful (1) or not (0).
328 // Note: This function requires that the device supports OpenGL framebuffer extension.
329 // The function has no effect if OffScreenRendering is ON.
330 virtual int SetUseOffScreenBuffers(bool offScreen);
332
336 virtual int SupportsOpenGL();
337
344 virtual void Initialize(void) {};
345
346 std::set<vtkGenericOpenGLResourceFreeCallback *> Resources;
347
349 std::set<vtkGenericOpenGLResourceFreeCallback *>::iterator it
350 = this->Resources.find(cb);
351 if (it == this->Resources.end())
352 {
353 this->Resources.insert(cb);
354 }
355 }
356
358 std::set<vtkGenericOpenGLResourceFreeCallback *>::iterator it
359 = this->Resources.find(cb);
360 if (it != this->Resources.end())
361 {
362 this->Resources.erase(it);
363 }
364 }
365
375 virtual void PushContext() { this->MakeCurrent(); }
376 virtual void PopContext() {}
377
378protected:
381
383
384 // used in testing for opengl support
385 // in the SupportsOpenGL() method
389
390 int TextureInternalFormats[VTK_UNICODE_STRING][3][5];
392
393 std::map<const vtkTextureObject *, int> TextureResourceIds;
394
395 virtual int GetPixelData(int x, int y, int x2, int y2, int front, unsigned char* data);
396 int GetRGBAPixelData(int x, int y, int x2, int y2, int front, float* data);
397 int GetRGBACharPixelData(int x, int y, int x2, int y2, int front,
398 unsigned char* data);
399
410
411 int CreateHardwareOffScreenBuffers(int width, int height, bool bind = false);
413
420
423
427 int OffScreenUseFrameBuffer;
428
430
433 int NumberOfFrameBuffers;
434 unsigned int TextureObjects[4]; // really GLuint
435 unsigned int FrameBufferObject; // really GLuint
436 unsigned int DepthRenderBufferObject; // really GLuint
437 int HardwareBufferSize[2];
438 bool HardwareOffScreenBuffersBind;
440
444 virtual void CreateAWindow() = 0;
445
449 virtual void DestroyWindow() = 0;
450
456
461
462
467
472
473 std::map<std::string, int> GLStateIntegers;
474
475 unsigned int BackLeftBuffer;
476 unsigned int BackRightBuffer;
477 unsigned int FrontLeftBuffer;
478 unsigned int FrontRightBuffer;
479 unsigned int FrontBuffer;
480 unsigned int BackBuffer;
481
482 #ifndef VTK_LEGACY_REMOVE
487 unsigned int LastGraphicError;
488 #endif
489
493 int OwnContext;
494
495 vtkTimeStamp ContextCreationTime;
496
497 vtkTextureUnitManager *TextureUnitManager;
498
500
501 bool Initialized; // ensure glewinit has been called
502
504
505private:
506 vtkOpenGLRenderWindow(const vtkOpenGLRenderWindow&) VTK_DELETE_FUNCTION;
507 void operator=(const vtkOpenGLRenderWindow&) VTK_DELETE_FUNCTION;
508};
509
510#endif
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:42
list of point or cell ids
Definition: vtkIdList.h:37
a simple class to control print indentation
Definition: vtkIndent.h:40
OpenGL rendering window.
OpenGL rendering window.
virtual void DrawPixels(int dstXmin, int dstYmin, int dstXmax, int dstYmax, int srcXmin, int srcYmin, int srcXmax, int srcYmax, int srcWidth, int srcHeight, int numComponents, int dataType, void *data)
Replacement for the old glDrawPixels function, but it allows for scaling the data and using only part...
std::map< std::string, int > GLStateIntegers
virtual int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray *z)
std::string GetOpenGLSupportMessage()
Return a message profiding additional details about the results of calling SupportsOpenGL() This can ...
vtkTextureUnitManager * GetTextureUnitManager()
Returns its texture unit manager object.
virtual bool GetUseOffScreenBuffers()
static bool GetContextSupportsOpenGL32()
Get if the context includes opengl core profile 3.2 support.
virtual void DrawPixels(int x1, int y1, int x2, int y2, int numComponents, int dataType, void *data)
Replacement for the old glDrawPixels function.
int GetColorBufferSizes(int *rgba)
Get the size of the color buffer.
vtkOpenGLShaderCache * ShaderCache
virtual int GetRGBAPixelData(int x, int y, int x2, int y2, int front, vtkFloatArray *data)
virtual void SetSize(int a[2])
Set the size of the window in screen coordinates in pixels.
virtual unsigned char * GetRGBACharPixelData(int x, int y, int x2, int y2, int front)
int GetTextureUnitForTexture(vtkTextureObject *)
Get the texture unit for a given texture object.
void SetTextureUnitManager(vtkTextureUnitManager *textureUnitManager)
Set the texture unit manager.
unsigned int GetBackRightBuffer()
Return the OpenGL name of the back right buffer.
void RegisterGraphicsResources(vtkGenericOpenGLResourceFreeCallback *cb)
virtual void DestroyWindow()=0
Destroy a not-off-screen window.
virtual const char * GetRenderingBackend()
What rendering backend has the user requested.
std::set< vtkGenericOpenGLResourceFreeCallback * > Resources
virtual void WaitForCompletion()
Block the thread until the actual rendering is finished().
virtual int SetZbufferData(int x1, int y1, int x2, int y2, float *buffer)
virtual void ReleaseRGBAPixelData(float *data)
static void SetGlobalMaximumNumberOfMultiSamples(int val)
Set/Get the maximum number of multisamples.
virtual float GetMaximumHardwareLineWidth()
Return the largest line width supported by the hardware.
int GetRGBACharPixelData(int x, int y, int x2, int y2, int front, unsigned char *data)
virtual int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray *data, int front, int blend=0)
void BindHardwareOffScreenBuffers()
void DestroyHardwareOffScreenBuffers()
virtual int SetPixelData(int x, int y, int x2, int y2, unsigned char *data, int front)
Set/Get the pixel data of an image, transmitted as RGBRGBRGB.
int GetDepthBufferSize()
Get the size of the depth buffer.
void ActivateTexture(vtkTextureObject *)
Activate a texture unit for this texture.
unsigned int GetBackBuffer()
Return the OpenGL name of the back left buffer.
vtkTextureObject * DrawPixelsTextureObject
virtual void SetSize(int, int)
void SetContextSupportsOpenGL32(bool val)
virtual int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char *data, int front, int blend=0)
virtual void ReleaseGraphicsResources(vtkRenderWindow *)
Free up any graphics resources associated with this window a value of NULL means the context may alre...
virtual int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray *data, int front, int blend=0)
virtual int GetPixelData(int x, int y, int x2, int y2, int front, unsigned char *data)
int CreateHardwareOffScreenBuffers(int width, int height, bool bind=false)
void UnregisterGraphicsResources(vtkGenericOpenGLResourceFreeCallback *cb)
unsigned int GetFrontRightBuffer()
Return the OpenGL name of the front right buffer.
virtual int SupportsOpenGL()
Does this render window support OpenGL? 0-false, 1-true.
virtual bool IsPointSpriteBugPresent()
Returns true if driver has an EGL/OpenGL bug that makes vtkChartsCoreCxx-TestChartDoubleColors and ot...
unsigned int GetFrontBuffer()
Return the OpenGL name of the front left buffer.
virtual void OpenGLInitContext()
virtual int GetPixelData(int x, int y, int x2, int y2, int front, vtkUnsignedCharArray *data)
virtual int SetRGBAPixelData(int x, int y, int x2, int y2, float *data, int front, int blend=0)
unsigned int GetBackLeftBuffer()
Return the OpenGL name of the back left buffer.
void InitializeTextureInternalFormats()
virtual void PushContext()
Ability to push and pop this window's context as the current context.
virtual float * GetRGBAPixelData(int x, int y, int x2, int y2, int front)
Set/Get the pixel data of an image, transmitted as RGBARGBA...
virtual void OpenGLInitState()
static int GetGlobalMaximumNumberOfMultiSamples()
virtual void CreateAWindow()=0
Create a not-off-screen window.
int GetRGBAPixelData(int x, int y, int x2, int y2, int front, float *data)
int GetDefaultTextureInternalFormat(int vtktype, int numComponents, bool needInteger, bool needFloat)
Get a mapping of vtk data types to native texture formats for this window we put this on the RenderWi...
int CreateHardwareOffScreenWindow(int width, int height)
Create an offScreen window based on OpenGL framebuffer extension.
unsigned int GetFrontLeftBuffer()
Return the OpenGL name of the front left buffer.
virtual vtkMTimeType GetContextCreationTime()
Get the time when the OpenGL context was created.
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
virtual void StereoUpdate()
Update system if needed due to stereo rendering.
void UnbindHardwareOffScreenBuffers()
virtual int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray *buffer)
virtual void Initialize(void)
Initialize the rendering window.
virtual void OpenGLInit()
Initialize OpenGL for this window.
void DestroyHardwareOffScreenWindow()
Destroy an offscreen window based on OpenGL framebuffer extension.
void DeactivateTexture(vtkTextureObject *)
Deactive a previously activated texture.
void RestoreGLState()
Restore OpenGL state at end of the rendering.
void GetOpenGLVersion(int &major, int &minor)
Get the major and minor version numbers of the OpenGL context we are using ala 3.2,...
void SaveGLState()
Query and save OpenGL state.
std::map< const vtkTextureObject *, int > TextureResourceIds
virtual int GetRGBACharPixelData(int x, int y, int x2, int y2, int front, vtkUnsignedCharArray *data)
virtual int SetUseOffScreenBuffers(bool offScreen)
Create and bind offscreen rendering buffers without destroying the current OpenGL context.
virtual float * GetZbufferData(int x1, int y1, int x2, int y2)
Set/Get the zbuffer data from an image.
virtual void DrawPixels(int srcWidth, int srcHeight, int numComponents, int dataType, void *data)
Replacement for the old glDrawPixels function.
virtual int GetZbufferData(int x1, int y1, int x2, int y2, float *z)
virtual int SetPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray *data, int front)
virtual unsigned char * GetPixelData(int x, int y, int x2, int y2, int front)
Set/Get the pixel data of an image, transmitted as RGBRGB...
manage Shader Programs within a context
The VertexArrayObject class uses, or emulates, vertex array objects.
create a window for renderers to draw into
virtual void MakeCurrent()=0
Attempt to make this window the current graphics context for the calling thread.
The ShaderProgram uses one or more Shader objects.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:49
abstracts an OpenGL texture object.
allocate/free texture units.
handles properties associated with a texture map
Definition: vtkTexture.h:71
record modification and/or execution time
Definition: vtkTimeStamp.h:36
dynamic, self-adjusting array of unsigned char
@ height
Definition: vtkX3D.h:254
@ data
Definition: vtkX3D.h:315
@ string
Definition: vtkX3D.h:490
vtkTypeUInt64 vtkMTimeType
Definition: vtkType.h:248
#define VTK_UNICODE_STRING
Definition: vtkType.h:81