VTK  9.1.0
vtkOpenGLRenderer.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOpenGLRenderer.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 =========================================================================*/
102 #ifndef vtkOpenGLRenderer_h
103 #define vtkOpenGLRenderer_h
104 
105 #include "vtkDeprecation.h" // for VTK_DEPRECATED_IN_9_0_0
106 #include "vtkRenderer.h"
107 #include "vtkRenderingOpenGL2Module.h" // For export macro
108 #include "vtkSmartPointer.h" // For vtkSmartPointer
109 #include <string> // Ivars
110 #include <vector> // STL Header
111 
112 class vtkFloatArray;
113 class vtkOpenGLFXAAFilter;
114 class vtkRenderPass;
115 class vtkOpenGLState;
116 class vtkOpenGLTexture;
118 class vtkTextureObject;
119 class vtkDepthPeelingPass;
121 class vtkPBRLUTTexture;
123 class vtkShaderProgram;
124 class vtkShadowMapPass;
125 class vtkSSAOPass;
126 
127 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLRenderer : public vtkRenderer
128 {
129 public:
132  void PrintSelf(ostream& os, vtkIndent indent) override;
133 
137  void DeviceRender(void) override;
138 
143 
151 
152  void Clear(void) override;
153 
157  int UpdateLights(void) override;
158 
166 
174  "Removed in 9.1.0 as this bug does not affect any macOS release that VTK supports")
175  bool HaveApplePrimitiveIdBug();
176 
181  static bool HaveAppleQueryAllocationBug();
182 
188  bool IsDualDepthPeelingSupported();
189 
190  // Get the state object used to keep track of
191  // OpenGL state
192  vtkOpenGLState* GetState();
193 
194  // get the standard lighting uniform declarations
195  // for the current set of lights
196  const char* GetLightingUniforms();
197 
198  // update the lighting uniforms for this shader if they
199  // are out of date
200  void UpdateLightingUniforms(vtkShaderProgram* prog);
201 
202  // get the complexity of the current lights as a int
203  // 0 = no lighting
204  // 1 = headlight
205  // 2 = directional lights
206  // 3 = positional lights
208  {
209  NoLighting = 0,
210  Headlight = 1,
211  Directional = 2,
212  Positional = 3
213  };
214  vtkGetMacro(LightingComplexity, int);
215 
216  // get the number of lights turned on
217  vtkGetMacro(LightingCount, int);
218 
220 
227 
229 
236 
241 
243 
246  vtkSetMacro(UseSphericalHarmonics, bool);
247  vtkGetMacro(UseSphericalHarmonics, bool);
248  vtkBooleanMacro(UseSphericalHarmonics, bool);
250 
254  void SetEnvironmentTexture(vtkTexture* texture, bool isSRGB = false) override;
255 
256  // Method to release graphics resources
258 
259 protected:
261  ~vtkOpenGLRenderer() override;
262 
266  void CheckCompilation(unsigned int fragmentShader);
267 
273  int UpdateGeometry(vtkFrameBufferObjectBase* fbo = nullptr) override;
274 
281 
282  friend class vtkOpenGLProperty;
283  friend class vtkOpenGLTexture;
285  friend class vtkOpenGLImageResliceMapper;
286 
291 
296 
301 
306 
311 
312  // Is rendering at translucent geometry stage using depth peeling and
313  // rendering a layer other than the first one? (Boolean value)
314  // If so, the uniform variables UseTexture and Texture can be set.
315  // (Used by vtkOpenGLProperty or vtkOpenGLTexture)
317 
318  friend class vtkRenderPass;
319 
324 
329 
335 
336 private:
337  vtkOpenGLRenderer(const vtkOpenGLRenderer&) = delete;
338  void operator=(const vtkOpenGLRenderer&) = delete;
339 };
340 
341 #endif
vtkOpenGLRenderer::~vtkOpenGLRenderer
~vtkOpenGLRenderer() override
vtkOpenGLRenderer::GetDepthPeelingHigherLayer
int GetDepthPeelingHigherLayer()
Is rendering at translucent geometry stage using depth peeling and rendering a layer other than the f...
vtkOpenGLRenderer::LightingDeclaration
std::string LightingDeclaration
Definition: vtkOpenGLRenderer.h:320
vtkPBRPrefilterTexture
precompute prefilter texture used in physically based rendering
Definition: vtkPBRPrefilterTexture.h:37
vtkOpenGLRenderer::Clear
void Clear(void) override
Clear the image to the background color.
vtkDepthPeelingPass
Implement Depth Peeling for use within a framebuffer pass.
Definition: vtkDepthPeelingPass.h:64
vtkOpenGLRenderer::GetCurrentTexturedBackground
vtkTexture * GetCurrentTexturedBackground()
Check and return the textured background for the current state If monocular or stereo left eye,...
vtkOpenGLRenderer::EnvMapLookupTable
vtkPBRLUTTexture * EnvMapLookupTable
Definition: vtkOpenGLRenderer.h:330
vtkFloatArray
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:145
vtkOpenGLRenderer::FXAAFilter
vtkOpenGLFXAAFilter * FXAAFilter
FXAA is delegated to an instance of vtkOpenGLFXAAFilter.
Definition: vtkOpenGLRenderer.h:290
vtkOpenGLRenderer::GetEnvMapLookupTable
vtkPBRLUTTexture * GetEnvMapLookupTable()
Get environment textures used for image based lighting.
vtkSSAOPass
Implement a screen-space ambient occlusion pass.
Definition: vtkSSAOPass.h:43
vtkOpenGLRenderer::UpdateGeometry
int UpdateGeometry(vtkFrameBufferObjectBase *fbo=nullptr) override
Ask all props to update and draw any opaque and translucent geometry.
vtkSmartPointer< vtkTransform >
vtkOpenGLProperty
OpenGL property.
Definition: vtkOpenGLProperty.h:30
vtkRenderer.h
VTK_DEPRECATED_IN_9_1_0
#define VTK_DEPRECATED_IN_9_1_0(reason)
Definition: vtkDeprecation.h:117
vtkOpenGLRenderer::DeviceRenderTranslucentPolygonalGeometry
void DeviceRenderTranslucentPolygonalGeometry(vtkFrameBufferObjectBase *fbo=nullptr) override
Render translucent polygonal geometry.
vtkOpenGLRenderer::LightingComplexityEnum
LightingComplexityEnum
Definition: vtkOpenGLRenderer.h:208
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
vtkOpenGLRenderer::SetEnvironmentTexture
void SetEnvironmentTexture(vtkTexture *texture, bool isSRGB=false) override
Overriden in order to connect the texture to the environment map textures.
vtkFrameBufferObjectBase
abstract interface to OpenGL FBOs
Definition: vtkFrameBufferObjectBase.h:33
vtkOpenGLRenderer::DepthPeelingPass
vtkDepthPeelingPass * DepthPeelingPass
Depth peeling is delegated to an instance of vtkDepthPeelingPass.
Definition: vtkOpenGLRenderer.h:295
vtkShadowMapPass
Implement a shadow mapping render pass.
Definition: vtkShadowMapPass.h:90
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39
vtkOpenGLRenderer::ReleaseGraphicsResources
void ReleaseGraphicsResources(vtkWindow *w) override
vtkOpenGLRenderer::LightingUpdateTime
vtkMTimeType LightingUpdateTime
Definition: vtkOpenGLRenderer.h:323
vtkTexture
handles properties associated with a texture map
Definition: vtkTexture.h:175
vtkOpenGLRenderer::New
static vtkOpenGLRenderer * New()
vtkOpenGLRenderer::GetEnvMapPrefiltered
vtkPBRPrefilterTexture * GetEnvMapPrefiltered()
Get environment textures used for image based lighting.
vtkPBRIrradianceTexture
precompute irradiance texture used in physically based rendering
Definition: vtkPBRIrradianceTexture.h:36
vtkOrderIndependentTranslucentPass
Implement OIT rendering using average color.
Definition: vtkOrderIndependentTranslucentPass.h:39
vtkShaderProgram
The ShaderProgram uses one or more Shader objects.
Definition: vtkShaderProgram.h:124
vtkOpenGLRenderer::LightingComplexity
int LightingComplexity
Definition: vtkOpenGLRenderer.h:321
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
vtkTextureObject
abstracts an OpenGL texture object.
Definition: vtkTextureObject.h:60
vtkOpenGLRenderer::UpdateLights
int UpdateLights(void) override
Ask lights to load themselves into graphics pipeline.
vtkSmartPointer.h
vtkOpenGLRenderer
OpenGL renderer.
Definition: vtkOpenGLRenderer.h:128
vtkOpenGLFXAAFilter
Perform FXAA antialiasing on the current framebuffer.
Definition: vtkOpenGLFXAAFilter.h:57
vtkOpenGLImageSliceMapper
OpenGL mapper for image slice display.
Definition: vtkOpenGLImageSliceMapper.h:37
vtkOpenGLRenderer::EnvMapPrefiltered
vtkPBRPrefilterTexture * EnvMapPrefiltered
Definition: vtkOpenGLRenderer.h:332
vtkOpenGLRenderer::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkOpenGLRenderer::SphericalHarmonics
vtkSmartPointer< vtkFloatArray > SphericalHarmonics
Definition: vtkOpenGLRenderer.h:333
vtkOpenGLRenderer::DepthPeelingHigherLayer
int DepthPeelingHigherLayer
Definition: vtkOpenGLRenderer.h:316
vtkOpenGLRenderer::SSAOPass
vtkSSAOPass * SSAOPass
SSAO is delegated to an instance of vtkSSAOPass.
Definition: vtkOpenGLRenderer.h:310
vtkX3D::string
@ string
Definition: vtkX3D.h:496
vtkOpenGLRenderer::UserLightTransform
vtkSmartPointer< vtkTransform > UserLightTransform
Optional user transform for lights.
Definition: vtkOpenGLRenderer.h:328
vtkDeprecation.h
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:182
vtkOpenGLRenderer::SetUserLightTransform
void SetUserLightTransform(vtkTransform *transform)
Set the user light transform applied after the camera transform.
vtkOpenGLRenderer::GetUserLightTransform
vtkTransform * GetUserLightTransform()
Set the user light transform applied after the camera transform.
vtkOpenGLRenderer::vtkOpenGLRenderer
vtkOpenGLRenderer()
vtkPBRLUTTexture
precompute BRDF look-up table texture used in physically based rendering
Definition: vtkPBRLUTTexture.h:36
vtkOpenGLRenderer::GetSphericalHarmonics
vtkFloatArray * GetSphericalHarmonics()
Get spherical harmonics coefficients used for irradiance.
vtkOpenGLTexture
OpenGL texture map.
Definition: vtkOpenGLTexture.h:83
vtkOpenGLRenderer::UseSphericalHarmonics
bool UseSphericalHarmonics
Definition: vtkOpenGLRenderer.h:334
vtkOpenGLRenderer::TranslucentPass
vtkOrderIndependentTranslucentPass * TranslucentPass
Fallback for transparency.
Definition: vtkOpenGLRenderer.h:300
vtkOpenGLRenderer::GetEnvMapIrradiance
vtkPBRIrradianceTexture * GetEnvMapIrradiance()
Get environment textures used for image based lighting.
vtkOpenGLState
OpenGL state storage.
Definition: vtkOpenGLState.h:82
vtkOpenGLRenderer::EnvMapIrradiance
vtkPBRIrradianceTexture * EnvMapIrradiance
Definition: vtkOpenGLRenderer.h:331
vtkOpenGLRenderer::DeviceRenderOpaqueGeometry
void DeviceRenderOpaqueGeometry(vtkFrameBufferObjectBase *fbo=nullptr) override
Overridden to support hidden line removal.
vtkOpenGLRenderer::DeviceRender
void DeviceRender(void) override
Concrete open gl render method.
vtkOpenGLRenderer::CheckCompilation
void CheckCompilation(unsigned int fragmentShader)
Check the compilation status of some fragment shader source.
vtkOpenGLRenderer::LightingCount
int LightingCount
Definition: vtkOpenGLRenderer.h:322
vtkOpenGLRenderer::ShadowMapPass
vtkShadowMapPass * ShadowMapPass
Shadows are delegated to an instance of vtkShadowMapPass.
Definition: vtkOpenGLRenderer.h:305
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
vtkRenderPass
Perform part of the rendering of a vtkRenderer.
Definition: vtkRenderPass.h:57