TDME2  1.9.200
EngineGLES2Renderer.cpp
Go to the documentation of this file.
2 
3 #if defined(_MSC_VER)
4  // this suppresses a warning redefinition of APIENTRY macro
5  #define NOMINMAX
6  #include <windows.h>
7 #endif
8 #define GLFW_INCLUDE_NONE
9 #include <GLFW/glfw3.h>
10 
11 #include <string>
12 
13 #include <tdme/tdme.h>
18 #include <tdme/engine/Engine.h>
19 #include <tdme/engine/Version.h>
21 
23 
24 using std::string;
25 
33 
34 EngineGLES2Renderer::EngineGLES2Renderer()
35 {
36 }
37 
39  if (tryIdx > 0) return false;
40  glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
41  glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_NATIVE_CONTEXT_API);
42  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
43  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
44  return true;
45 }
46 
48  glfwMakeContextCurrent(glfwWindow);
49  if (glfwGetCurrentContext() == nullptr) {
50  Console::println("EngineGLES2Renderer::initializeWindowSystemRendererContext(): glfwMakeContextCurrent(): Error: No window attached to context");
51  return false;
52  }
53  return true;
54 }
55 
57 {
58  if (Engine::lightingShader != nullptr)
59  Engine::lightingShader->updateMatrices(contextIdx);
60 
61  if (Engine::particlesShader != nullptr)
62  Engine::particlesShader->updateMatrices(contextIdx);
63 
64  if (Engine::linesShader != nullptr)
65  Engine::linesShader->updateMatrices(contextIdx);
66 
67  if (Engine::currentEngine->shadowMapping != nullptr)
68  Engine::currentEngine->shadowMapping->updateMatrices(contextIdx);
69 }
70 
72 {
73  if (Engine::lightingShader != nullptr)
74  Engine::lightingShader->updateMatrices(contextIdx);
75 
76  if (Engine::particlesShader != nullptr)
77  Engine::particlesShader->updateMatrices(contextIdx);
78 
79  if (Engine::linesShader != nullptr)
80  Engine::linesShader->updateMatrices(contextIdx);
81 
82  if (Engine::currentEngine->shadowMapping != nullptr)
83  Engine::currentEngine->shadowMapping->updateMatrices(contextIdx);
84 }
85 
87 {
88  if (Engine::lightingShader != nullptr)
89  Engine::lightingShader->updateMatrices(contextIdx);
90 
91  if (Engine::particlesShader != nullptr)
92  Engine::particlesShader->updateMatrices(contextIdx);
93 
94  if (Engine::linesShader != nullptr)
95  Engine::linesShader->updateMatrices(contextIdx);
96 
97  if (Engine::currentEngine->shadowMapping != nullptr)
98  Engine::currentEngine->shadowMapping->updateMatrices(contextIdx);
99 }
100 
101 void EngineGLES2Renderer::onBindTexture(int contextIdx, int32_t textureId)
102 {
103  if (Engine::lightingShader != nullptr)
104  Engine::lightingShader->bindTexture(contextIdx, textureId);
105 
106  if (Engine::guiShader != nullptr)
107  Engine::guiShader->bindTexture(textureId);
108 
109  if (Engine::currentEngine->shadowMapping != nullptr)
110  Engine::currentEngine->shadowMapping->bindTexture(contextIdx, textureId);
111 }
112 
114 {
115  if (Engine::lightingShader != nullptr)
116  Engine::lightingShader->updateTextureMatrix(contextIdx);
117 
118  if (Engine::currentEngine->shadowMapping != nullptr)
119  Engine::currentEngine->shadowMapping->updateTextureMatrix(contextIdx);
120 
121  if (Engine::guiShader != nullptr)
122  Engine::guiShader->updateTextureMatrix();
123 }
124 
126 {
127  if (Engine::lightingShader != nullptr)
128  Engine::lightingShader->updateEffect(contextIdx);
129 
130  if (Engine::particlesShader != nullptr)
131  Engine::particlesShader->updateEffect(contextIdx);
132 
133  if (Engine::linesShader != nullptr)
134  Engine::linesShader->updateEffect(contextIdx);
135 
136  if (Engine::guiShader != nullptr)
137  Engine::guiShader->updateEffect();
138 
139 }
140 
141 void EngineGLES2Renderer::onUpdateLight(int contextIdx, int32_t lightId)
142 {
143  if (Engine::lightingShader != nullptr)
144  Engine::lightingShader->updateLight(contextIdx, lightId);
145 
146  if (Engine::currentEngine->shadowMapping != nullptr)
147  Engine::currentEngine->shadowMapping->updateLight(contextIdx, lightId);
148 }
149 
151 {
152  if (Engine::lightingShader != nullptr)
153  Engine::lightingShader->updateMaterial(contextIdx);
154 
155  if (Engine::currentEngine->shadowMapping != nullptr)
156  Engine::currentEngine->shadowMapping->updateMaterial(contextIdx);
157 }
158 
160  if (Engine::lightingShader != nullptr)
161  Engine::lightingShader->setShader(contextIdx, getShader(contextIdx));
162 
163  if (Engine::currentEngine->shadowMapping != nullptr)
164  Engine::currentEngine->shadowMapping->setShader(contextIdx, getShader(contextIdx));
165 }
166 
168  if (Engine::lightingShader != nullptr)
169  Engine::lightingShader->updateShaderParameters(contextIdx);
170 
171  if (Engine::currentEngine->shadowMapping != nullptr)
172  Engine::currentEngine->shadowMapping->updateShaderParameters(contextIdx);
173 }
174 
175 // end point for engine to create renderer
177 {
179  Console::println("EngineGL2Renderer::createInstance(): Engine and renderer version do not match: '" + EngineGLES2Renderer::getRendererVersion() + "' != '" + Version::getVersion() + "'");
180  return nullptr;
181  }
182  Console::println("EngineGLES2Renderer::createInstance(): Creating EngineGLES2Renderer instance!");
183  return new EngineGLES2Renderer();
184 }
EngineGLES2Renderer * createInstance()
Engine main class.
Definition: Engine.h:131
static STATIC_DLL_IMPEXT Engine * currentEngine
Definition: Engine.h:201
static STATIC_DLL_IMPEXT unique_ptr< GUIShader > guiShader
Definition: Engine.h:220
static STATIC_DLL_IMPEXT unique_ptr< LinesShader > linesShader
Definition: Engine.h:218
static STATIC_DLL_IMPEXT unique_ptr< LightingShader > lightingShader
Definition: Engine.h:216
static STATIC_DLL_IMPEXT unique_ptr< ParticlesShader > particlesShader
Definition: Engine.h:217
unique_ptr< ShadowMapping > shadowMapping
Definition: Engine.h:301
Interface to lighting shader program.
Engine connector of GLES2 renderer to other engine functionality.
void onUpdateCameraMatrix(int contextIdx) override
Update camera matrix event.
void onUpdateModelViewMatrix(int contextIdx) override
Update model view matrix event.
void onUpdateProjectionMatrix(int contextIdx) override
Update projection matrix event.
void onUpdateTextureMatrix(int contextIdx) override
Update texture matrix for active texture unit event.
void onBindTexture(int contextIdx, int32_t textureId) override
On bind texture event.
void onUpdateMaterial(int contextIdx) override
On update material.
bool prepareWindowSystemRendererContext(int tryIdx) override
Prepare window system renderer context.
void onUpdateEffect(int contextIdx) override
Update material.
bool initializeWindowSystemRendererContext(GLFWwindow *glfwWindow) override
Initialize window system renderer context.
void onUpdateLight(int contextIdx, int32_t lightId) override
Update light.
void onUpdateShaderParameters(int contextIdx) override
On update shader parameters.
void onUpdateShader(int contextIdx) override
On update shader.
const string & getShader(int contextIdx)
Get shader.
Definition: Renderer.h:1182
static string getVersion()
Definition: Version.cpp:11