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 =========================================================================*/
25 #ifndef vtkOpenGLRenderWindow_h
26 #define vtkOpenGLRenderWindow_h
27 
28 #include "vtkDeprecation.h" // for VTK_DEPRECATED_IN_9_0_0
29 #include "vtkRect.h" // for vtkRecti
30 #include "vtkRenderWindow.h"
31 #include "vtkRenderingOpenGL2Module.h" // For export macro
32 #include "vtkType.h" // for ivar
33 #include <map> // for ivar
34 #include <set> // for ivar
35 #include <string> // for ivar
36 
37 class vtkIdList;
40 class vtkOpenGLHardwareSupport;
45 class vtkShaderProgram;
46 class vtkStdString;
47 class vtkTexture;
48 class vtkTextureObject;
51 class vtkOpenGLState;
52 
53 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLRenderWindow : public vtkRenderWindow
54 {
55 public:
57  void PrintSelf(ostream& os, vtkIndent indent) override;
58 
62  void Start(void) override;
63 
68  void Frame() override;
69 
73  const char* GetRenderingBackend() override;
74 
76 
82 
84 
89  unsigned char* GetPixelData(int x, int y, int x2, int y2, int front, int right) override;
91  int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right) override;
93  int x, int y, int x2, int y2, unsigned char* data, int front, int right) override;
95  int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front, int right) override;
97 
99 
102  float* GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right = 0) override;
104  int x, int y, int x2, int y2, int front, vtkFloatArray* data, int right = 0) override;
106  int x, int y, int x2, int y2, float* data, int front, int blend = 0, int right = 0) override;
107  int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray* data, int front, int blend = 0,
108  int right = 0) override;
109  void ReleaseRGBAPixelData(float* data) override;
110  unsigned char* GetRGBACharPixelData(
111  int x, int y, int x2, int y2, int front, int right = 0) override;
113  int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right = 0) override;
114  int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char* data, int front,
115  int blend = 0, int right = 0) override;
116  int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front,
117  int blend = 0, int right = 0) override;
119 
121 
124  float* GetZbufferData(int x1, int y1, int x2, int y2) override;
125  int GetZbufferData(int x1, int y1, int x2, int y2, float* z) override;
126  int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
127  int SetZbufferData(int x1, int y1, int x2, int y2, float* buffer) override;
128  int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
130 
135 
140 
145 
149  int GetDepthBufferSize() override;
150 
155 
160  int GetColorBufferSizes(int* rgba) override;
161 
167  int GetColorBufferInternalFormat(int attachmentPoint);
168 
172  virtual void OpenGLInit();
173 
174  // Initialize the state of OpenGL that VTK wants for this window
175  virtual void OpenGLInitState();
176 
177  // Initialize VTK for rendering in a new OpenGL context
178  virtual void OpenGLInitContext();
179 
185  void GetOpenGLVersion(int& major, int& minor);
186 
188  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
189  unsigned int GetBackLeftBuffer();
190  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
191  unsigned int GetBackRightBuffer();
192  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
193  unsigned int GetFrontLeftBuffer();
194  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
195  unsigned int GetFrontRightBuffer();
196  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
197  unsigned int GetBackBuffer();
198  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
199  unsigned int GetFrontBuffer();
201 
205  virtual vtkMTimeType GetContextCreationTime();
206 
210  vtkOpenGLShaderCache* GetShaderCache();
211 
216 
218 
221  vtkGetObjectMacro(RenderFramebuffer, vtkOpenGLFramebufferObject);
222  VTK_DEPRECATED_IN_9_1_0("Removed in 9.1")
223  vtkOpenGLFramebufferObject* GetOffScreenFramebuffer() { return this->RenderFramebuffer; }
225 
229  vtkGetObjectMacro(DisplayFramebuffer, vtkOpenGLFramebufferObject);
230 
236 
241  void WaitForCompletion() override;
242 
246  virtual void DrawPixels(
247  int x1, int y1, int x2, int y2, int numComponents, int dataType, void* data);
248 
253  virtual void DrawPixels(int dstXmin, int dstYmin, int dstXmax, int dstYmax, int srcXmin,
254  int srcYmin, int srcXmax, int srcYmax, int srcWidth, int srcHeight, int numComponents,
255  int dataType, void* data);
256 
261  virtual void DrawPixels(int srcWidth, int srcHeight, int numComponents, int dataType, void* data);
262 
266  virtual float GetMaximumHardwareLineWidth() { return this->MaximumHardwareLineWidth; }
267 
274  virtual bool IsPointSpriteBugPresent() { return false; }
275 
282  int vtktype, int numComponents, bool needInteger, bool needFloat, bool needSRGB);
283 
289  std::string GetOpenGLSupportMessage() { return this->OpenGLSupportMessage; }
290 
294  int SupportsOpenGL() override;
295 
299  const char* ReportCapabilities() override;
300 
307  virtual void Initialize(void) {}
308 
309  std::set<vtkGenericOpenGLResourceFreeCallback*> Resources;
310 
312  {
313  std::set<vtkGenericOpenGLResourceFreeCallback*>::iterator it = this->Resources.find(cb);
314  if (it == this->Resources.end())
315  {
316  this->Resources.insert(cb);
317  }
318  }
319 
321  {
322  std::set<vtkGenericOpenGLResourceFreeCallback*>::iterator it = this->Resources.find(cb);
323  if (it != this->Resources.end())
324  {
325  this->Resources.erase(it);
326  }
327  }
328 
338  virtual void PushContext() { this->MakeCurrent(); }
339  virtual void PopContext() {}
340 
346 
356  virtual bool SetSwapControl(int) { return false; }
357 
358  // Get the state object used to keep track of
359  // OpenGL state
360  virtual vtkOpenGLState* GetState() { return this->State; }
361 
362  // Get a VBO that can be shared by many
363  // It consists of normalized display
364  // coordinates for a quad and tcoords
366 
367  // Activate and return thje texture unit for a generic 2d 64x64
368  // float greyscale noise texture ranging from 0 to 1. The texture is
369  // generated using PerlinNoise. This textur eunit will automatically
370  // be deactivated at the end of the render process.
372 
376  void End() override;
377 
381  void Render() override;
382 
387  void StereoMidpoint() override;
388 
389  // does VTKs framebuffer require resolving for reading pixels
391 
397 
402 
406  void BlitDisplayFramebuffer(int right, int srcX, int srcY, int srcWidth, int srcHeight, int destX,
407  int destY, int destWidth, int destHeight, int bufferMode, int interpolation);
408 
410 
414  void BlitToRenderFramebuffer(bool includeDepth);
415  void BlitToRenderFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int destX,
416  int destY, int destWidth, int destHeight, int bufferMode, int interpolation);
418 
424  {
425  BlitToHardware, // hardware buffers
426  BlitToCurrent, // currently bound draw framebuffer
427  NoBlit // no blit, GUI or external code will handle the blit
428  };
429 
431 
435  vtkSetClampMacro(FrameBlitMode, FrameBlitModes, BlitToHardware, NoBlit);
436  vtkGetMacro(FrameBlitMode, FrameBlitModes);
437  void SetFrameBlitModeToBlitToHardware() { this->SetFrameBlitMode(BlitToHardware); }
438  void SetFrameBlitModeToBlitToCurrent() { this->SetFrameBlitMode(BlitToCurrent); }
439  void SetFrameBlitModeToNoBlit() { this->SetFrameBlitMode(NoBlit); }
441 
443  // copy depth values from a source framebuffer to a destination framebuffer
444  // using texture maps to do the copy. The source framebufferobject must be texture
445  // backed. This method is designed to work around issues with trying to blit depth
446  // values between framebuffers that have different depth formats.
447 
448  // blit entire source texture to active viewport
450 
451  // blit specified source texels to active viewport
452  virtual void TextureDepthBlit(vtkTextureObject* source, int srcX, int srcY, int srcX2, int srcY2);
453 
454  // blit specified source texels to specified viewport
455  virtual void TextureDepthBlit(vtkTextureObject* source, int srcX, int srcY, int srcX2, int srcY2,
456  int destX, int destY, int destX2, int destY2);
458 
459 protected:
462 
463  // blits the display buffers to the appropriate hardware buffers
465 
466  // when frame is called, at the end blit to the hardware buffers
468 
469  // a FSQ we use to resolve MSAA that handles gamma
471 
472  // a FSQ we use to blit depth values
474 
475  // used in testing for opengl support
476  // in the SupportsOpenGL() method
480 
481  virtual int ReadPixels(
482  const vtkRecti& rect, int front, int glFormat, int glType, void* data, int right = 0);
483 
492  int CreateFramebuffers(int width, int height);
495 
496  // used when we need to resolve a multisampled
497  // framebuffer
499 
503  virtual void CreateAWindow() = 0;
504 
508  virtual void DestroyWindow() = 0;
509 
513  void SaveGLState();
514 
519 
520  std::map<std::string, int> GLStateIntegers;
521 
526 
528 
530 
531  bool Initialized; // ensure glewinit has been called
532  bool GlewInitValid; // Did glewInit initialize with a valid state?
533 
535 
537 
538  // used for fast quad rendering
540 
541  // noise texture
543 
545 
546  // keep track of in case we need to recreate the framebuffer
548 
549  int ScreenSize[2];
550 
551 private:
553  void operator=(const vtkOpenGLRenderWindow&) = delete;
554 
555  // Keeping `State` private so the only way to access it is through
556  // `this->GetState()`.
557  vtkOpenGLState* State;
558 };
559 
560 #endif
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:36
list of point or cell ids
Definition: vtkIdList.h:31
a simple class to control print indentation
Definition: vtkIndent.h:34
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:36
abstracts an OpenGL texture object.
allocate/free texture units.
handles properties associated with a texture map
Definition: vtkTexture.h:66
record modification and/or execution time
Definition: vtkTimeStamp.h:33
dynamic, self-adjusting array of unsigned char
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39
virtual void MakeCurrent()
Make the window current.
Definition: vtkWindow.h:246
@ 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