TDME2  1.9.200
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DeferredLightingRenderShader.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 #include <vector>
5 
6 #include <tdme/tdme.h>
9 #include <tdme/engine/Camera.h>
10 #include <tdme/engine/Decal.h>
11 #include <tdme/engine/Engine.h>
12 #include <tdme/engine/fwd-tdme.h>
13 
14 using std::array;
15 using std::vector;
16 
23 
24 /**
25  * Deferred lighint render shader
26  * @author Andreas Drewke
27  */
29 {
30 
31 private:
32  static constexpr int DECAL_COUNT { 80 };
33 
34  Renderer* renderer { nullptr };
35  int32_t vertexShaderId { -1 };
36  int32_t fragmentShaderId { -1 };
37  int32_t programId { -1 };
47 
48  // specular lighting
49  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightEnabled;
50  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightAmbient;
51  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightDiffuse;
52  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightSpecular;
53  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightPosition;
54  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightSpotDirection;
55  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightSpotExponent;
56  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightSpotCosCutoff;
57  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightConstantAttenuation;
58  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightLinearAttenuation;
59  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightQuadraticAttenuation;
60  array<int32_t, Engine::LIGHTS_MAX> uniformSpecularLightRadius;
61  int32_t uniformCameraMatrix { -1 };
63 
64  // pbr
65  int32_t uniformCamera { -1 };
66  int32_t uniformDiffuseEnvSampler { -1 };
67  int32_t uniformSpecularEnvSampler { -1 };
68  int32_t uniformbrdfLUT { -1 };
69  int32_t textureDiffuseEnvSampler { -1 };
70  int32_t textureSpecularEnvSampler { -1 };
71  int32_t texturebrdfLUT { -1 };
72 
73  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightEnabled;
74  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightAmbient;
75  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightDirection;
76  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightRange;
77  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightColor;
78  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightIntensity;
79  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightPosition;
80  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightInnerConeCos;
81  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightOuterConeCos;
82  array<int32_t, Engine::LIGHTS_MAX> uniformPBRLightType;
83 
84  array<Texture*, 6> envDiffuseTextures;
85  array<Texture*, 6> envSpecularTextures;
86 
87  int32_t uniformDecalCount { -1 };
88  int32_t uniformDecalsTextureUnit { -1 };
89  array<int32_t, DECAL_COUNT> uniformDecalWorldToDecalSpace;
90  array<int32_t, DECAL_COUNT> uniformDecalAtlasTextureOrientation;
91  array<int32_t, DECAL_COUNT> uniformDecalAtlasTexturePosition;
92  array<int32_t, DECAL_COUNT> uniformDecalAtlasTextureDimension;
93  array<int32_t, DECAL_COUNT> uniformDecalSpriteSheetDimension;
94  array<int32_t, DECAL_COUNT> uniformDecalSpriteIndex;
95 
97 
99  bool isRunning;
100 
101 public:
102  // forbid class copy
104 
105  /**
106  * Public constructor
107  * @param renderer renderer
108  */
110 
111  /**
112  * Public destructor
113  */
115 
116  /**
117  * @return if initialized and ready to use
118  */
119  bool isInitialized();
120 
121  /**
122  * Initialize
123  */
124  void initialize();
125 
126  /**
127  * Dispose
128  */
129  void dispose();
130 
131  /**
132  * Use render program
133  * @param engine engine
134  * @param decalEntities decal entities
135  */
136  void useProgram(Engine* engine, vector<Decal*>& decalEntities);
137 
138  /**
139  * Un use render program
140  */
141  void unUseProgram();
142 
143 };
Decal entity to be used with engine class.
Definition: Decal.h:36
Engine main class.
Definition: Engine.h:131
Texture entity.
Definition: Texture.h:24
void useProgram(Engine *engine, vector< Decal * > &decalEntities)
Use render program.
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6