VTK  9.2.6
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=========================================================================*/
37#ifndef vtkOpenGLRenderWindow_h
38#define vtkOpenGLRenderWindow_h
39
40#include "vtkDeprecation.h" // for VTK_DEPRECATED_IN_9_1_0
41#include "vtkRect.h" // for vtkRecti
42#include "vtkRenderWindow.h"
43#include "vtkRenderingOpenGL2Module.h" // For export macro
44#include "vtkType.h" // for ivar
45#include <map> // for ivar
46#include <set> // for ivar
47#include <string> // for ivar
48
49class vtkIdList;
52class vtkOpenGLHardwareSupport;
58class vtkStdString;
59class vtkTexture;
63class vtkOpenGLState;
64
65class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLRenderWindow : public vtkRenderWindow
66{
67public:
69 void PrintSelf(ostream& os, vtkIndent indent) override;
70
74 void Start(void) override;
75
80 void Frame() override;
81
85 const char* GetRenderingBackend() override;
86
88
94
96
101 unsigned char* GetPixelData(int x, int y, int x2, int y2, int front, int right) override;
103 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right) override;
105 int x, int y, int x2, int y2, unsigned char* data, int front, int right) override;
107 int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front, int right) override;
109
111
114 float* GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right = 0) override;
116 int x, int y, int x2, int y2, int front, vtkFloatArray* data, int right = 0) override;
118 int x, int y, int x2, int y2, float* data, int front, int blend = 0, int right = 0) override;
119 int SetRGBAPixelData(int x, int y, int x2, int y2, vtkFloatArray* data, int front, int blend = 0,
120 int right = 0) override;
121 void ReleaseRGBAPixelData(float* data) override;
122 unsigned char* GetRGBACharPixelData(
123 int x, int y, int x2, int y2, int front, int right = 0) override;
125 int x, int y, int x2, int y2, int front, vtkUnsignedCharArray* data, int right = 0) override;
126 int SetRGBACharPixelData(int x, int y, int x2, int y2, unsigned char* data, int front,
127 int blend = 0, int right = 0) override;
128 int SetRGBACharPixelData(int x, int y, int x2, int y2, vtkUnsignedCharArray* data, int front,
129 int blend = 0, int right = 0) override;
131
133
136 float* GetZbufferData(int x1, int y1, int x2, int y2) override;
137 int GetZbufferData(int x1, int y1, int x2, int y2, float* z) override;
138 int GetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
139 int SetZbufferData(int x1, int y1, int x2, int y2, float* buffer) override;
140 int SetZbufferData(int x1, int y1, int x2, int y2, vtkFloatArray* buffer) override;
142
147
152
157
161 int GetDepthBufferSize() override;
162
167
172 int GetColorBufferSizes(int* rgba) override;
173
179 int GetColorBufferInternalFormat(int attachmentPoint);
180
184 virtual void OpenGLInit();
185
186 // Initialize the state of OpenGL that VTK wants for this window
187 virtual void OpenGLInitState();
188
189 // Initialize VTK for rendering in a new OpenGL context
190 virtual void OpenGLInitContext();
191
197 void GetOpenGLVersion(int& major, int& minor);
198
200 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
201 unsigned int GetBackLeftBuffer();
202 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
203 unsigned int GetBackRightBuffer();
204 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
205 unsigned int GetFrontLeftBuffer();
206 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
207 unsigned int GetFrontRightBuffer();
208 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
209 unsigned int GetBackBuffer();
210 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1, now always returns 0")
211 unsigned int GetFrontBuffer();
213
217 virtual vtkMTimeType GetContextCreationTime();
218
222 vtkOpenGLShaderCache* GetShaderCache();
223
228
230
233 vtkGetObjectMacro(RenderFramebuffer, vtkOpenGLFramebufferObject);
234 VTK_DEPRECATED_IN_9_1_0("Removed in 9.1")
235 vtkOpenGLFramebufferObject* GetOffScreenFramebuffer() { return this->RenderFramebuffer; }
237
241 vtkGetObjectMacro(DisplayFramebuffer, vtkOpenGLFramebufferObject);
242
248
253 void WaitForCompletion() override;
254
258 virtual void DrawPixels(
259 int x1, int y1, int x2, int y2, int numComponents, int dataType, void* data);
260
265 virtual void DrawPixels(int dstXmin, int dstYmin, int dstXmax, int dstYmax, int srcXmin,
266 int srcYmin, int srcXmax, int srcYmax, int srcWidth, int srcHeight, int numComponents,
267 int dataType, void* data);
268
273 virtual void DrawPixels(int srcWidth, int srcHeight, int numComponents, int dataType, void* data);
274
278 virtual float GetMaximumHardwareLineWidth() { return this->MaximumHardwareLineWidth; }
279
286 virtual bool IsPointSpriteBugPresent() { return false; }
287
294 int vtktype, int numComponents, bool needInteger, bool needFloat, bool needSRGB);
295
301 std::string GetOpenGLSupportMessage() { return this->OpenGLSupportMessage; }
302
306 int SupportsOpenGL() override;
307
311 const char* ReportCapabilities() override;
312
319 virtual void Initialize(void) {}
320
321 std::set<vtkGenericOpenGLResourceFreeCallback*> Resources;
322
324 {
325 std::set<vtkGenericOpenGLResourceFreeCallback*>::iterator it = this->Resources.find(cb);
326 if (it == this->Resources.end())
327 {
328 this->Resources.insert(cb);
329 }
330 }
331
333 {
334 std::set<vtkGenericOpenGLResourceFreeCallback*>::iterator it = this->Resources.find(cb);
335 if (it != this->Resources.end())
336 {
337 this->Resources.erase(it);
338 }
339 }
340
350 virtual void PushContext() { this->MakeCurrent(); }
351 virtual void PopContext() {}
352
358
368 virtual bool SetSwapControl(int) { return false; }
369
370 // Get the state object used to keep track of
371 // OpenGL state
372 virtual vtkOpenGLState* GetState() { return this->State; }
373
374 // Get a VBO that can be shared by many
375 // It consists of normalized display
376 // coordinates for a quad and tcoords
378
379 // Activate and return thje texture unit for a generic 2d 64x64
380 // float greyscale noise texture ranging from 0 to 1. The texture is
381 // generated using PerlinNoise. This textur eunit will automatically
382 // be deactivated at the end of the render process.
384
388 void End() override;
389
393 void Render() override;
394
399 void StereoMidpoint() override;
400
401 // does VTKs framebuffer require resolving for reading pixels
403
409
414
418 void BlitDisplayFramebuffer(int right, int srcX, int srcY, int srcWidth, int srcHeight, int destX,
419 int destY, int destWidth, int destHeight, int bufferMode, int interpolation);
420
422
426 void BlitToRenderFramebuffer(bool includeDepth);
427 void BlitToRenderFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int destX,
428 int destY, int destWidth, int destHeight, int bufferMode, int interpolation);
430
436 {
437 BlitToHardware, // hardware buffers
438 BlitToCurrent, // currently bound draw framebuffer
439 NoBlit // no blit, GUI or external code will handle the blit
440 };
441
443
447 vtkSetClampMacro(FrameBlitMode, FrameBlitModes, BlitToHardware, NoBlit);
448 vtkGetMacro(FrameBlitMode, FrameBlitModes);
449 void SetFrameBlitModeToBlitToHardware() { this->SetFrameBlitMode(BlitToHardware); }
450 void SetFrameBlitModeToBlitToCurrent() { this->SetFrameBlitMode(BlitToCurrent); }
451 void SetFrameBlitModeToNoBlit() { this->SetFrameBlitMode(NoBlit); }
453
455
458 vtkSetMacro(FramebufferFlipY, bool);
459 vtkGetMacro(FramebufferFlipY, bool);
460 vtkBooleanMacro(FramebufferFlipY, bool);
462
464 // copy depth values from a source framebuffer to a destination framebuffer
465 // using texture maps to do the copy. The source framebufferobject must be texture
466 // backed. This method is designed to work around issues with trying to blit depth
467 // values between framebuffers that have different depth formats.
468
469 // blit entire source texture to active viewport
471
472 // blit specified source texels to active viewport
473 virtual void TextureDepthBlit(vtkTextureObject* source, int srcX, int srcY, int srcX2, int srcY2);
474
475 // blit specified source texels to specified viewport
476 virtual void TextureDepthBlit(vtkTextureObject* source, int srcX, int srcY, int srcX2, int srcY2,
477 int destX, int destY, int destX2, int destY2);
479
480protected:
483
484 // blits the display buffers to the appropriate hardware buffers
486
487 // when frame is called, at the end blit to the hardware buffers
489
490 // a FSQ we use to resolve MSAA that handles gamma
492
493 // a FSQ we use to blit depth values
495
496 // a FSQ we use to flip framebuffer texture
498
499 // flip quad helpers Y tcoord
501
502 // resolve and flip renderframebuffer as needed
503 // when copying to displayframebuffer. Returns
504 // true if the color buffer was copied.
506
507 // used in testing for opengl support
508 // in the SupportsOpenGL() method
512
513 virtual int ReadPixels(
514 const vtkRecti& rect, int front, int glFormat, int glType, void* data, int right = 0);
515
524 int CreateFramebuffers(int width, int height);
527
528 // used when we need to resolve a multisampled
529 // framebuffer
531
535 virtual void CreateAWindow() = 0;
536
540 virtual void DestroyWindow() = 0;
541
546
551
552 std::map<std::string, int> GLStateIntegers;
553
558
560
562
563 bool Initialized; // ensure glewinit has been called
564 bool GlewInitValid; // Did glewInit initialize with a valid state?
565
567
569
570 // used for fast quad rendering
572
573 // noise texture
575
577
578 // keep track of in case we need to recreate the framebuffer
580
581 int ScreenSize[2];
582
583private:
585 void operator=(const vtkOpenGLRenderWindow&) = delete;
586
587 // Keeping `State` private so the only way to access it is through
588 // `this->GetState()`.
589 vtkOpenGLState* State;
590};
591
592#endif
dynamic, self-adjusting array of float
list of point or cell ids
Definition vtkIdList.h:43
a simple class to control print indentation
Definition vtkIndent.h:49
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...
vtkTextureUnitManager * GetTextureUnitManager()
Returns its texture unit manager object.
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.
const char * GetRenderingBackend() override
What rendering backend has the user requested.
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...
float * GetZbufferData(int x1, int y1, int x2, int y2) override
Set/Get the zbuffer data from an image.
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.
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... front in this context indicates that the...
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.
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... front in this context indicates that the...
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...
vtkOpenGLBufferObject * GetTQuad2DVBO()
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
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 bool ResolveFlipRenderFramebuffer()
virtual void PushContext()
Ability to push and pop this window's context as the current context.
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...
vtkOpenGLQuadHelper * FlipQuad
virtual void OpenGLInitState()
vtkOpenGLFramebufferObject * RenderFramebuffer
static int GetGlobalMaximumNumberOfMultiSamples()
Set/Get the maximum number of multisamples.
virtual vtkOpenGLState * GetState()
virtual void CreateAWindow()=0
Create a not-off-screen window.
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...
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.
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... front in this context indicates that the...
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 bool SetSwapControl(int)
Set the number of vertical syncs required between frames.
vtkOpenGLBufferObject * TQuad2DVBO
~vtkOpenGLRenderWindow() override
const char * ReportCapabilities() override
Get report of capabilities for the render window.
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...
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... front in this context indicates that the...
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.
abstracts an OpenGL texture object.
allocate/free texture units.
handles properties associated with a texture map
Definition vtkTexture.h:78
record modification and/or execution time
dynamic, self-adjusting array of unsigned char
window superclass for vtkRenderWindow
Definition vtkWindow.h:48
virtual void MakeCurrent()
Make the window current.
Definition vtkWindow.h:255
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