VTK  9.1.0
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 =========================================================================*/
64 #ifndef vtkOpenGLRenderWindow_h
65 #define vtkOpenGLRenderWindow_h
66 
67 #include "vtkDeprecation.h" // for VTK_DEPRECATED_IN_9_0_0
68 #include "vtkRect.h" // for vtkRecti
69 #include "vtkRenderWindow.h"
70 #include "vtkRenderingOpenGL2Module.h" // For export macro
71 #include "vtkType.h" // for ivar
72 #include <map> // for ivar
73 #include <set> // for ivar
74 #include <string> // for ivar
75 
76 class vtkIdList;
79 class vtkOpenGLHardwareSupport;
84 class vtkShaderProgram;
85 class vtkStdString;
86 class vtkTexture;
87 class vtkTextureObject;
90 class vtkOpenGLState;
91 
92 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLRenderWindow : public vtkRenderWindow
93 {
94 public:
96  void PrintSelf(ostream& os, vtkIndent indent) override;
97 
101  void Start(void) override;
102 
107  void Frame() override;
108 
112  const char* GetRenderingBackend() override;
113 
115 
121 
123 
128  unsigned char* GetPixelData(int x, int y, int x2, int y2, int front, int right) override;
130  int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right) override;
132  int x, int y, int x2, int y2, unsigned char* data, int front, int right) override;
134  int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front, int right) override;
136 
138 
141  float* GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right = 0) override;
143  int x, int y, int x2, int y2, int front, vtkFloatArray* data, int right = 0) override;
145  int x, int y, int x2, int y2, float* data, int front, int blend = 0, int right = 0) override;
146  int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray* data, int front, int blend = 0,
147  int right = 0) override;
148  void ReleaseRGBAPixelData(float* data) override;
149  unsigned char* GetRGBACharPixelData(
150  int x, int y, int x2, int y2, int front, int right = 0) override;
152  int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right = 0) override;
153  int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char* data, int front,
154  int blend = 0, int right = 0) override;
155  int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front,
156  int blend = 0, int right = 0) override;
158 
160 
163  float* GetZbufferData(int x1, int y1, int x2, int y2) override;
164  int GetZbufferData(int x1, int y1, int x2, int y2, float* z) override;
165  int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
166  int SetZbufferData(int x1, int y1, int x2, int y2, float* buffer) override;
167  int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
169 
174 
179 
184 
188  int GetDepthBufferSize() override;
189 
194 
199  int GetColorBufferSizes(int* rgba) override;
200 
206  int GetColorBufferInternalFormat(int attachmentPoint);
207 
211  virtual void OpenGLInit();
212 
213  // Initialize the state of OpenGL that VTK wants for this window
214  virtual void OpenGLInitState();
215 
216  // Initialize VTK for rendering in a new OpenGL context
217  virtual void OpenGLInitContext();
218 
224  void GetOpenGLVersion(int& major, int& minor);
225 
227  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
228  unsigned int GetBackLeftBuffer();
229  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
230  unsigned int GetBackRightBuffer();
231  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
232  unsigned int GetFrontLeftBuffer();
233  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
234  unsigned int GetFrontRightBuffer();
235  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
236  unsigned int GetBackBuffer();
237  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
238  unsigned int GetFrontBuffer();
240 
244  virtual vtkMTimeType GetContextCreationTime();
245 
249  vtkOpenGLShaderCache* GetShaderCache();
250 
255 
257 
260  vtkGetObjectMacro(RenderFramebuffer, vtkOpenGLFramebufferObject);
261  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1")
262  vtkOpenGLFramebufferObject* GetOffScreenFramebuffer() { return this->RenderFramebuffer; }
264 
268  vtkGetObjectMacro(DisplayFramebuffer, vtkOpenGLFramebufferObject);
269 
275 
280  void WaitForCompletion() override;
281 
285  virtual void DrawPixels(
286  int x1, int y1, int x2, int y2, int numComponents, int dataType, void* data);
287 
292  virtual void DrawPixels(int dstXmin, int dstYmin, int dstXmax, int dstYmax, int srcXmin,
293  int srcYmin, int srcXmax, int srcYmax, int srcWidth, int srcHeight, int numComponents,
294  int dataType, void* data);
295 
300  virtual void DrawPixels(int srcWidth, int srcHeight, int numComponents, int dataType, void* data);
301 
305  virtual float GetMaximumHardwareLineWidth() { return this->MaximumHardwareLineWidth; }
306 
313  virtual bool IsPointSpriteBugPresent() { return false; }
314 
321  int vtktype, int numComponents, bool needInteger, bool needFloat, bool needSRGB);
322 
328  std::string GetOpenGLSupportMessage() { return this->OpenGLSupportMessage; }
329 
333  int SupportsOpenGL() override;
334 
338  const char* ReportCapabilities() override;
339 
346  virtual void Initialize(void) {}
347 
348  std::set<vtkGenericOpenGLResourceFreeCallback*> Resources;
349 
351  {
352  std::set<vtkGenericOpenGLResourceFreeCallback*>::iterator it = this->Resources.find(cb);
353  if (it == this->Resources.end())
354  {
355  this->Resources.insert(cb);
356  }
357  }
358 
360  {
361  std::set<vtkGenericOpenGLResourceFreeCallback*>::iterator it = this->Resources.find(cb);
362  if (it != this->Resources.end())
363  {
364  this->Resources.erase(it);
365  }
366  }
367 
377  virtual void PushContext() { this->MakeCurrent(); }
378  virtual void PopContext() {}
379 
385 
395  virtual bool SetSwapControl(int) { return false; }
396 
397  // Get the state object used to keep track of
398  // OpenGL state
399  virtual vtkOpenGLState* GetState() { return this->State; }
400 
401  // Get a VBO that can be shared by many
402  // It consists of normalized display
403  // coordinates for a quad and tcoords
405 
406  // Activate and return thje texture unit for a generic 2d 64x64
407  // float greyscale noise texture ranging from 0 to 1. The texture is
408  // generated using PerlinNoise. This textur eunit will automatically
409  // be deactivated at the end of the render process.
411 
415  void End() override;
416 
420  void Render() override;
421 
426  void StereoMidpoint() override;
427 
428  // does VTKs framebuffer require resolving for reading pixels
430 
436 
441 
445  void BlitDisplayFramebuffer(int right, int srcX, int srcY, int srcWidth, int srcHeight, int destX,
446  int destY, int destWidth, int destHeight, int bufferMode, int interpolation);
447 
449 
453  void BlitToRenderFramebuffer(bool includeDepth);
454  void BlitToRenderFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int destX,
455  int destY, int destWidth, int destHeight, int bufferMode, int interpolation);
457 
463  {
464  BlitToHardware, // hardware buffers
465  BlitToCurrent, // currently bound draw framebuffer
466  NoBlit // no blit, GUI or external code will handle the blit
467  };
468 
470 
474  vtkSetClampMacro(FrameBlitMode, FrameBlitModes, BlitToHardware, NoBlit);
475  vtkGetMacro(FrameBlitMode, FrameBlitModes);
476  void SetFrameBlitModeToBlitToHardware() { this->SetFrameBlitMode(BlitToHardware); }
477  void SetFrameBlitModeToBlitToCurrent() { this->SetFrameBlitMode(BlitToCurrent); }
478  void SetFrameBlitModeToNoBlit() { this->SetFrameBlitMode(NoBlit); }
480 
482  // copy depth values from a source framebuffer to a destination framebuffer
483  // using texture maps to do the copy. The source framebufferobject must be texture
484  // backed. This method is designed to work around issues with trying to blit depth
485  // values between framebuffers that have different depth formats.
486 
487  // blit entire source texture to active viewport
489 
490  // blit specified source texels to active viewport
491  virtual void TextureDepthBlit(vtkTextureObject* source, int srcX, int srcY, int srcX2, int srcY2);
492 
493  // blit specified source texels to specified viewport
494  virtual void TextureDepthBlit(vtkTextureObject* source, int srcX, int srcY, int srcX2, int srcY2,
495  int destX, int destY, int destX2, int destY2);
497 
498 protected:
501 
502  // blits the display buffers to the appropriate hardware buffers
504 
505  // when frame is called, at the end blit to the hardware buffers
507 
508  // a FSQ we use to resolve MSAA that handles gamma
510 
511  // a FSQ we use to blit depth values
513 
514  // used in testing for opengl support
515  // in the SupportsOpenGL() method
519 
520  virtual int ReadPixels(
521  const vtkRecti& rect, int front, int glFormat, int glType, void* data, int right = 0);
522 
531  int CreateFramebuffers(int width, int height);
534 
535  // used when we need to resolve a multisampled
536  // framebuffer
538 
542  virtual void CreateAWindow() = 0;
543 
547  virtual void DestroyWindow() = 0;
548 
552  void SaveGLState();
553 
558 
559  std::map<std::string, int> GLStateIntegers;
560 
565 
567 
569 
570  bool Initialized; // ensure glewinit has been called
571  bool GlewInitValid; // Did glewInit initialize with a valid state?
572 
574 
576 
577  // used for fast quad rendering
579 
580  // noise texture
582 
584 
585  // keep track of in case we need to recreate the framebuffer
587 
588  int ScreenSize[2];
589 
590 private:
592  void operator=(const vtkOpenGLRenderWindow&) = delete;
593 
594  // Keeping `State` private so the only way to access it is through
595  // `this->GetState()`.
596  vtkOpenGLState* State;
597 };
598 
599 #endif
dynamic, self-adjusting array of float
list of point or cell ids
Definition: vtkIdList.h:140
a simple class to control print indentation
Definition: vtkIndent.h:113
OpenGL buffer object.
Internal class which encapsulates OpenGL FramebufferObject.
Class to make rendering a full screen quad easier.
OpenGL rendering window.
void ReleaseGraphicsResources(vtkWindow *) override
Free up any graphics resources associated with this window a value of NULL means the context may alre...
int GetColorBufferInternalFormat(int attachmentPoint)
Get the internal format of current attached texture or render buffer.
int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
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...
vtkOpenGLFramebufferObject * DisplayFramebuffer
std::map< std::string, int > GLStateIntegers
std::string GetOpenGLSupportMessage()
Return a message profiding additional details about the results of calling SupportsOpenGL() This can ...
int GetRGBAPixelData(int x, int y, int x2, int y2, int front, vtkFloatArray *data, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
vtkOpenGLBufferObject * GetTQuad2DVBO()
virtual void DrawPixels(int x1, int y1, int x2, int y2, int numComponents, int dataType, void *data)
Replacement for the old glDrawPixels function.
int SetRGBAPixelData(int x, int y, int x2, int y2, float *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
int GetTextureUnitForTexture(vtkTextureObject *)
Get the texture unit for a given texture object.
void RegisterGraphicsResources(vtkGenericOpenGLResourceFreeCallback *cb)
virtual void DestroyWindow()=0
Destroy a not-off-screen window.
FrameBlitModes
Define how the resulting image should be blitted when at the end of the Frame() call if SwapBuffers i...
virtual void TextureDepthBlit(vtkTextureObject *source)
vtkTypeBool OwnContext
Flag telling if the context has been created here or was inherited.
int GetZbufferData(int x1, int y1, int x2, int y2, float *z) override
Set/Get the zbuffer data from an image.
virtual void TextureDepthBlit(vtkTextureObject *source, int srcX, int srcY, int srcX2, int srcY2, int destX, int destY, int destX2, int destY2)
void StereoMidpoint() override
Intermediate method performs operations required between the rendering of the left and right eye.
vtkTextureObject * NoiseTextureObject
vtkOpenGLFramebufferObject * ResolveFramebuffer
int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray *buffer) override
Set/Get the zbuffer data from an image.
unsigned char * GetRGBACharPixelData(int x, int y, int x2, int y2, int front, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
void End() override
Update the system, if needed, at end of render process.
unsigned char * GetPixelData(int x, int y, int x2, int y2, int front, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB...
void BlitToRenderFramebuffer(bool includeDepth)
Blit the currently bound read buffer to the renderbuffer.
static void SetGlobalMaximumNumberOfMultiSamples(int val)
Set/Get the maximum number of multisamples.
virtual float GetMaximumHardwareLineWidth()
Return the largest line width supported by the hardware.
vtkTextureUnitManager * GetTextureUnitManager()
Returns its texture unit manager object.
int GetDefaultTextureInternalFormat(int vtktype, int numComponents, bool needInteger, bool needFloat, bool needSRGB)
Get a mapping of vtk data types to native texture formats for this window we put this on the RenderWi...
void ActivateTexture(vtkTextureObject *)
Activate a texture unit for this texture.
vtkTextureObject * DrawPixelsTextureObject
bool GetUsingSRGBColorSpace()
Is this window/fo in sRGB colorspace.
void Start(void) override
Begin the rendering process.
int GetColorBufferSizes(int *rgba) override
Get the size of the color buffer.
int SetPixelData(int x, int y, int x2, int y2, unsigned char *data, int front, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB...
int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
void Render() override
Handle opengl specific code and calls superclass.
void UnregisterGraphicsResources(vtkGenericOpenGLResourceFreeCallback *cb)
void BlitDisplayFramebuffer(int right, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, int bufferMode, int interpolation)
Blit a display buffer into a currently bound draw destination.
void Frame() override
A termination method performed at the end of the rendering process to do things like swapping buffers...
virtual bool IsPointSpriteBugPresent()
Returns true if driver has an EGL/OpenGL bug that makes vtkChartsCoreCxx-TestChartDoubleColors and ot...
void ReleaseRGBAPixelData(float *data) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
std::set< vtkGenericOpenGLResourceFreeCallback * > Resources
const char * GetRenderingBackend() override
What rendering backend has the user requested.
virtual void OpenGLInitContext()
vtkOpenGLQuadHelper * DepthBlitQuad
virtual void TextureDepthBlit(vtkTextureObject *source, int srcX, int srcY, int srcX2, int srcY2)
void WaitForCompletion() override
Block the thread until the actual rendering is finished().
virtual void PushContext()
Ability to push and pop this window's context as the current context.
float * GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
virtual void OpenGLInitState()
vtkOpenGLFramebufferObject * RenderFramebuffer
static int GetGlobalMaximumNumberOfMultiSamples()
Set/Get the maximum number of multisamples.
virtual void CreateAWindow()=0
Create a not-off-screen window.
void BlitToRenderFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, int bufferMode, int interpolation)
Blit the currently bound read buffer to the renderbuffer.
virtual int ReadPixels(const vtkRecti &rect, int front, int glFormat, int glType, void *data, int right=0)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int SupportsOpenGL() override
Does this render window support OpenGL? 0-false, 1-true.
int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray *buffer) override
Set/Get the zbuffer data from an image.
const char * ReportCapabilities() override
Get report of capabilities for the render window.
int SetPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray *data, int front, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB...
int GetDepthBufferSize() override
Get the size of the depth buffer.
void SetFrameBlitModeToBlitToCurrent()
SetGet how to handle blits at the end of a Frame() call.
bool InitializeFromCurrentContext() override
Initialize the render window from the information associated with the currently activated OpenGL cont...
virtual vtkOpenGLState * GetState()
virtual bool SetSwapControl(int)
Set the number of vertical syncs required between frames.
vtkOpenGLBufferObject * TQuad2DVBO
~vtkOpenGLRenderWindow() override
virtual void Initialize(void)
Initialize the rendering window.
void SetFrameBlitModeToNoBlit()
SetGet how to handle blits at the end of a Frame() call.
int CreateFramebuffers(int width, int height)
Create the offScreen framebuffer Return if the creation was successful or not.
virtual void OpenGLInit()
Initialize OpenGL for this window.
int SetZbufferData(int x1, int y1, int x2, int y2, float *buffer) override
Set/Get the zbuffer data from an image.
void BlitDisplayFramebuffer()
Blit a display framebuffer into a currently bound draw destination.
virtual void BlitDisplayFramebuffersToHardware()
void DeactivateTexture(vtkTextureObject *)
Deactivate 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.
int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray *data, int front, int blend=0, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
int GetRGBACharPixelData(int x, int y, int x2, int y2, int front, vtkUnsignedCharArray *data, int right=0) override
Set/Get the pixel data of an image, transmitted as RGBARGBA...
float * GetZbufferData(int x1, int y1, int x2, int y2) override
Set/Get the zbuffer data from an image.
void SetFrameBlitModeToBlitToHardware()
SetGet how to handle blits at the end of a Frame() call.
int GetPixelData(int x, int y, int x2, int y2, int front, vtkUnsignedCharArray *data, int right) override
Set/Get the pixel data of an image, transmitted as RGBRGB...
virtual void DrawPixels(int srcWidth, int srcHeight, int numComponents, int dataType, void *data)
Replacement for the old glDrawPixels function.
vtkOpenGLQuadHelper * ResolveQuad
manage Shader Programs within a context
OpenGL state storage.
The VertexArrayObject class uses, or emulates, vertex array objects.
manage vertex buffer objects shared within a context
create a window for renderers to draw into
The ShaderProgram uses one or more Shader objects.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:105
abstracts an OpenGL texture object.
allocate/free texture units.
handles properties associated with a texture map
Definition: vtkTexture.h:175
record modification and/or execution time
Definition: vtkTimeStamp.h:52
dynamic, self-adjusting array of unsigned char
window superclass for vtkRenderWindow
Definition: vtkWindow.h:36
virtual void MakeCurrent()
Make the window current.
Definition: vtkWindow.h:243
@ height
Definition: vtkX3D.h:260
@ data
Definition: vtkX3D.h:321
@ string
Definition: vtkX3D.h:496
int vtkTypeBool
Definition: vtkABI.h:69
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_DEPRECATED_IN_9_1_0(reason)
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287