TDME2  1.9.200
LightingShaderPBRBaseImplementation.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 
5 #include <tdme/tdme.h>
6 #include <tdme/engine/fwd-tdme.h>
11 #include <tdme/engine/Engine.h>
12 #include <tdme/math/fwd-tdme.h>
13 #include <tdme/math/Matrix4x4.h>
14 
15 using std::array;
16 
23 
24 /**
25  * Lighting shader implementation
26  * @author Andreas Drewke
27  */
29 {
30 protected:
31  int32_t programId { -1 };
32  int32_t fragmentShaderId { -1 };
33  int32_t vertexShaderId { -1 };
34  int32_t uniformBaseColorFactor { -1 };
35  int32_t uniformBaseColorSampler { -1 };
37  int32_t uniformAlphaCutoffEnabled { -1 };
38  int32_t uniformAlphaCutoff { -1 };
39  int32_t uniformCamera { -1 };
40  int32_t uniformExposure { -1 };
41  int32_t uniformMetallicFactor { -1 };
44  int32_t uniformRoughnessFactor { -1 };
45  int32_t uniformNormalSampler { -1 };
47  int32_t uniformNormalScale { -1 };
48  int32_t uniformEmissiveSampler { -1 };
50  int32_t uniformEmissiveFactor { -1 };
52  int32_t uniformDiffuseEnvSampler { -1 };
53  int32_t uniformSpecularEnvSampler { -1 };
54  int32_t uniformbrdfLUT { -1 };
55  int32_t textureDiffuseEnvSampler { -1 };
56  int32_t textureSpecularEnvSampler { -1 };
57  int32_t texturebrdfLUT { -1 };
58 
59  array<int32_t, Engine::LIGHTS_MAX> uniformLightEnabled;
60  array<int32_t, Engine::LIGHTS_MAX> uniformLightAmbient;
61  array<int32_t, Engine::LIGHTS_MAX> uniformLightDirection;
62  array<int32_t, Engine::LIGHTS_MAX> uniformLightRange;
63  array<int32_t, Engine::LIGHTS_MAX> uniformLightColor;
64  array<int32_t, Engine::LIGHTS_MAX> uniformLightIntensity;
65  array<int32_t, Engine::LIGHTS_MAX> uniformLightPosition;
66  array<int32_t, Engine::LIGHTS_MAX> uniformLightInnerConeCos;
67  array<int32_t, Engine::LIGHTS_MAX> uniformLightOuterConeCos;
68  array<int32_t, Engine::LIGHTS_MAX> uniformLightType;
69 
70  array<Texture*, 6> envDiffuseTextures;
71  array<Texture*, 6> envSpecularTextures;
72 
73  bool initialized { false };
74  Renderer* renderer { nullptr };
75 
76 public:
77  // forbid class copy
79 
80  /**
81  * Public constructor
82  * @param renderer renderer
83  */
85 
86  // overridden methods
87  virtual bool isInitialized() override;
88  virtual void initialize() override;
89  virtual void useProgram(Engine* engine, int contextIdx) override;
90  virtual void unUseProgram(int contextIdx) override;
91  virtual void updateEffect(Renderer* renderer, int contextIdx) override;
92  virtual void updateMaterial(Renderer* renderer, int contextIdx) override;
93  virtual void updateLight(Renderer* renderer, int contextIdx, int32_t lightId) override;
94  virtual void updateMatrices(Renderer* renderer, int contextIdx) override;
95  virtual void updateTextureMatrix(Renderer* renderer, int contextIdx) override;
96  virtual void bindTexture(Renderer* renderer, int contextIdx, int32_t textureId) override;
97  virtual void updateShaderParameters(Renderer* renderer, int contextIdx) override = 0;
98  virtual void unloadTextures() override;
99  virtual void loadTextures(const string& pathName) override;
100 
101 };
Engine main class.
Definition: Engine.h:131
Texture entity.
Definition: Texture.h:24
virtual void updateLight(Renderer *renderer, int contextIdx, int32_t lightId) override
Update light to program.
virtual void updateTextureMatrix(Renderer *renderer, int contextIdx) override
Update texture matrix to program.
virtual void updateMaterial(Renderer *renderer, int contextIdx) override
Update material to program.
virtual void updateMatrices(Renderer *renderer, int contextIdx) override
Update matrices to program.
virtual void bindTexture(Renderer *renderer, int contextIdx, int32_t textureId) override
Bind texture.
virtual void updateEffect(Renderer *renderer, int contextIdx) override
Update effect to program.
virtual void useProgram(Engine *engine, int contextIdx) override
Use lighting program.
virtual void updateShaderParameters(Renderer *renderer, int contextIdx) override=0
Update shader parameters.
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6