TDME2  1.9.200
LightingShaderBaseImplementation.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 
22 
23 /**
24  * Lighting shader implementation
25  * @author Andreas Drewke
26  */
28 {
29 protected:
30  int32_t programId { -1 };
31  int32_t fragmentShaderId { -1 };
32  int32_t vertexShaderId { -1 };
33  int32_t uniformTextureAtlasSize { -1 };
35  int32_t uniformDiffuseTextureUnit { -1 };
41  int32_t uniformNormalTextureUnit { -1 };
43  int32_t uniformProjectionMatrix { -1 };
44  int32_t uniformCameraMatrix { -1 };
45  int32_t uniformCameraPosition { -1 };
46  int32_t uniformMVPMatrix { -1 };
47  int32_t uniformMVMatrix { -1 };
48  int32_t uniformNormalMatrix { -1 };
49  int32_t uniformModelMatrix { -1 };
50  int32_t uniformTextureMatrix { -1 };
51  int32_t uniformEffectColorMul { -1 };
52  int32_t uniformEffectColorAdd { -1 };
53  int32_t uniformMaterialAmbient { -1 };
54  int32_t uniformMaterialDiffuse { -1 };
55  int32_t uniformMaterialSpecular { -1 };
56  int32_t uniformMaterialEmission { -1 };
57  int32_t uniformMaterialShininess { -1 };
58  int32_t uniformMaterialReflection { -1 };
60  int32_t uniformTime { -1 };
65  array<int32_t, Engine::LIGHTS_MAX> uniformLightEnabled;
66  array<int32_t, Engine::LIGHTS_MAX> uniformLightAmbient;
67  array<int32_t, Engine::LIGHTS_MAX> uniformLightDiffuse;
68  array<int32_t, Engine::LIGHTS_MAX> uniformLightSpecular;
69  array<int32_t, Engine::LIGHTS_MAX> uniformLightPosition;
70  array<int32_t, Engine::LIGHTS_MAX> uniformLightSpotDirection;
71  array<int32_t, Engine::LIGHTS_MAX> uniformLightSpotExponent;
72  array<int32_t, Engine::LIGHTS_MAX> uniformLightSpotCosCutoff;
73  array<int32_t, Engine::LIGHTS_MAX> uniformLightConstantAttenuation;
74  array<int32_t, Engine::LIGHTS_MAX> uniformLightLinearAttenuation;
75  array<int32_t, Engine::LIGHTS_MAX> uniformLightQuadraticAttenuation;
76  array<int32_t, Engine::LIGHTS_MAX> uniformLightRadius;
77  array<float, 4> defaultSceneColor {{ 0.0f, 0.0f, 0.0f, 0.0f }};
78  bool initialized { false };
79  Renderer* renderer { nullptr };
80 
81 public:
82  // forbid class copy
84 
85  /**
86  * Public constructor
87  * @param renderer renderer
88  */
90 
91  // overridden methods
92  virtual bool isInitialized() override;
93  virtual void initialize() override;
94  virtual void useProgram(Engine* engine, int contextIdx) override;
95  virtual void unUseProgram(int contextIdx) override;
96  virtual void updateEffect(Renderer* renderer, int contextIdx) override;
97  virtual void updateMaterial(Renderer* renderer, int contextIdx) override;
98  virtual void updateLight(Renderer* renderer, int contextIdx, int32_t lightId) override;
99  virtual void updateMatrices(Renderer* renderer, int contextIdx) override;
100  virtual void updateTextureMatrix(Renderer* renderer, int contextIdx) override;
101  virtual void bindTexture(Renderer* renderer, int contextIdx, int32_t textureId) override;
102  virtual void updateShaderParameters(Renderer* renderer, int contextIdx) override = 0;
103  virtual void unloadTextures() override;
104  virtual void loadTextures(const string& pathName) override;
105 
106 };
Engine main class.
Definition: Engine.h:131
virtual void loadTextures(const string &pathName) override
Load textures.
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 unUseProgram(int contextIdx) override
Unuse lighting 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