VTK  9.7.1
vtkGLSLModLight.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
8 #ifndef vtkGLSLModLight_h
9 #define vtkGLSLModLight_h
10 
11 #include "vtkGLSLModifierBase.h"
12 
13 #include "vtkOpenGLRenderer.h" // for ivar
14 #include "vtkRenderingOpenGL2Module.h" // for export macro
15 
16 VTK_ABI_NAMESPACE_BEGIN
17 class vtkActor;
19 class vtkOpenGLRenderer;
20 class vtkShaderProgram;
21 
22 class VTKRENDERINGOPENGL2_EXPORT vtkGLSLModLight : public vtkGLSLModifierBase
23 {
24 public:
25  static vtkGLSLModLight* New();
27  void PrintSelf(ostream& os, vtkIndent indent) override;
28 
30  {
31  int Complexity = 0;
32  int Count = 0;
33  };
34 
35  static LightStatsBasic GetBasicLightStats(vtkOpenGLRenderer* renderer, vtkActor* actor);
36 
37  vtkSetMacro(UsePBRTextures, bool);
38  vtkGetMacro(UsePBRTextures, bool);
39 
40  vtkSetMacro(UseAnisotropy, bool);
41  vtkGetMacro(UseAnisotropy, bool);
42 
43  vtkSetMacro(UseClearCoat, bool);
44  vtkGetMacro(UseClearCoat, bool);
45 
46  // vtkGLSLModifierBase virtuals:
47  bool ReplaceShaderValues(vtkOpenGLRenderer* renderer, std::string& vertexShader,
48  std::string& tessControlShader, std::string& tessEvalShader, std::string& geometryShader,
49  std::string& fragmentShader, vtkAbstractMapper* mapper, vtkActor* actor) override;
51  vtkAbstractMapper* mapper, vtkActor* actor, vtkOpenGLVertexArrayObject* VAO = nullptr) override;
52  bool IsUpToDate(vtkOpenGLRenderer* renderer, vtkAbstractMapper* mapper, vtkActor* actor) override;
53 
54 protected:
56  ~vtkGLSLModLight() override;
57 
59  int LastLightComplexity = 0;
60  int LastLightCount = 0;
61 
63  bool UsePBRTextures = false;
64  bool UseAnisotropy = false;
65  bool UseClearCoat = false;
66 
71  vtkShaderProgram* CachedLocProgram = nullptr;
72  unsigned int CachedLocLinkCount = 0;
74  {
75  int IntensityOpacity = -1;
76  int IntensityAmbient = -1;
77  int IntensityDiffuse = -1;
78  int IntensitySpecular = -1;
79  int ColorAmbient = -1;
80  int ColorDiffuse = -1;
81  int ColorSpecular = -1;
82  int EnableSpecular = -1;
83  int PowerSpecular = -1;
84  int NormalScale = -1;
85  } Loc;
86 
87 private:
88  vtkGLSLModLight(const vtkGLSLModLight&) = delete;
89  void operator=(const vtkGLSLModLight&) = delete;
90 };
91 
92 VTK_ABI_NAMESPACE_END
93 #endif
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:41
virtual bool SetShaderParameters(vtkOpenGLRenderer *renderer, vtkShaderProgram *program, vtkAbstractMapper *mapper, vtkActor *actor, vtkOpenGLVertexArrayObject *VAO=nullptr)=0
a simple class to control print indentation
Definition: vtkIndent.h:28
The VertexArrayObject class uses, or emulates, vertex array objects.
Key for vtkObjectBase values.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
abstract class specifies interface to map data
Implement light kit support in the OpenGL renderer for vtkCellGrid.
Abstract class that helps you develop modifier for VTK GLSL shaders.
virtual bool ReplaceShaderValues(vtkOpenGLRenderer *renderer, std::string &vertexShader, std::string &tessControlShader, std::string &tessEvalShader, std::string &geometryShader, std::string &fragmentShader, vtkAbstractMapper *mapper, vtkActor *actor)=0
Abstract interfaces to replace shader values and apply parameters as uniform values.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
virtual bool IsUpToDate(vtkOpenGLRenderer *renderer, vtkAbstractMapper *mapper, vtkActor *actor)=0
Whether mod needs to be re-applied.
OpenGL renderer.
The ShaderProgram uses one or more Shader objects.