TDME2  1.9.200
EngineGL2Renderer.cpp
Go to the documentation of this file.
2 
3 #define GLFW_INCLUDE_NONE
4 #include <GLFW/glfw3.h>
5 
6 #if !defined(__APPLE__)
7  #define GLEW_NO_GLU
8  #include <GL/glew.h>
9  #if defined(_WIN32)
10  #include <GL/wglew.h>
11  #endif
12 #endif
13 
14 #include <string>
15 
16 #include <tdme/tdme.h>
21 #include <tdme/engine/Engine.h>
22 #include <tdme/engine/Version.h>
24 
26 
27 using std::string;
28 
36 
37 EngineGL2Renderer::EngineGL2Renderer()
38 {
39 }
40 
42  if (tryIdx > 0) return false;
43  glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_FALSE);
44  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE);
45  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
46  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
47  return true;
48 }
49 
51  glfwMakeContextCurrent(glfwWindow);
52  if (glfwGetCurrentContext() == nullptr) {
53  Console::println("EngineGL2Renderer::initializeWindowSystemRendererContext(): glfwMakeContextCurrent(): Error: No window attached to context");
54  return false;
55  }
56  #if !defined(__APPLE__)
57  glewExperimental = true;
58  GLenum glewInitStatus = glewInit();
59  if (glewInitStatus != GLEW_OK) {
60  Console::println("EngineGL2Renderer::initializeWindowSystemRendererContext(): glewInit(): Error: " + (string((char*)glewGetErrorString(glewInitStatus))));
61  return false;
62  }
63  #endif
64  return true;
65 }
66 
68 {
69  if (Engine::lightingShader != nullptr)
70  Engine::lightingShader->updateMatrices(contextIdx);
71 
72  if (Engine::particlesShader != nullptr)
73  Engine::particlesShader->updateMatrices(contextIdx);
74 
75  if (Engine::linesShader != nullptr)
76  Engine::linesShader->updateMatrices(contextIdx);
77 
78  if (Engine::Engine::currentEngine->shadowMapping != nullptr)
79  Engine::currentEngine->shadowMapping->updateMatrices(contextIdx);
80 }
81 
83 {
84  if (Engine::lightingShader != nullptr)
85  Engine::lightingShader->updateMatrices(contextIdx);
86 
87  if (Engine::particlesShader != nullptr)
88  Engine::particlesShader->updateMatrices(contextIdx);
89 
90  if (Engine::linesShader != nullptr)
91  Engine::linesShader->updateMatrices(contextIdx);
92 
93  if (Engine::currentEngine->shadowMapping != nullptr)
94  Engine::currentEngine->shadowMapping->updateMatrices(contextIdx);
95 }
96 
98 {
99  if (Engine::lightingShader != nullptr)
100  Engine::lightingShader->updateMatrices(contextIdx);
101 
102  if (Engine::particlesShader != nullptr)
103  Engine::particlesShader->updateMatrices(contextIdx);
104 
105  if (Engine::linesShader != nullptr)
106  Engine::linesShader->updateMatrices(contextIdx);
107 
108  if (Engine::currentEngine->shadowMapping != nullptr)
109  Engine::currentEngine->shadowMapping->updateMatrices(contextIdx);
110 }
111 
112 void EngineGL2Renderer::onBindTexture(int contextIdx, int32_t textureId)
113 {
114  if (Engine::lightingShader != nullptr)
115  Engine::lightingShader->bindTexture(contextIdx, textureId);
116 
117  if (Engine::guiShader != nullptr)
118  Engine::guiShader->bindTexture(textureId);
119 
120  if (Engine::currentEngine->shadowMapping != nullptr)
121  Engine::currentEngine->shadowMapping->bindTexture(contextIdx, textureId);
122 }
123 
125 {
126  if (Engine::lightingShader != nullptr)
127  Engine::lightingShader->updateTextureMatrix(contextIdx);
128 
129  if (Engine::currentEngine->shadowMapping != nullptr)
130  Engine::currentEngine->shadowMapping->updateTextureMatrix(contextIdx);
131 
132  if (Engine::guiShader != nullptr)
133  Engine::guiShader->updateTextureMatrix();
134 }
135 
137 {
138  if (Engine::lightingShader != nullptr)
139  Engine::lightingShader->updateEffect(contextIdx);
140 
141  if (Engine::particlesShader != nullptr)
142  Engine::particlesShader->updateEffect(contextIdx);
143 
144  if (Engine::linesShader != nullptr)
145  Engine::linesShader->updateEffect(contextIdx);
146 
147  if (Engine::guiShader != nullptr)
148  Engine::guiShader->updateEffect();
149 }
150 
151 void EngineGL2Renderer::onUpdateLight(int contextIdx, int32_t lightId)
152 {
153  if (Engine::lightingShader != nullptr)
154  Engine::lightingShader->updateLight(contextIdx, lightId);
155 
156  if (Engine::currentEngine->shadowMapping != nullptr)
157  Engine::currentEngine->shadowMapping->updateLight(contextIdx, lightId);
158 }
159 
161 {
162  if (Engine::lightingShader != nullptr)
163  Engine::lightingShader->updateMaterial(contextIdx);
164 
165  if (Engine::currentEngine->shadowMapping != nullptr)
166  Engine::currentEngine->shadowMapping->updateMaterial(contextIdx);
167 }
168 
169 void EngineGL2Renderer::onUpdateShader(int contextIdx) {
170  if (Engine::lightingShader != nullptr)
171  Engine::lightingShader->setShader(contextIdx, getShader(contextIdx));
172 
173  if (Engine::currentEngine->shadowMapping != nullptr)
174  Engine::currentEngine->shadowMapping->setShader(contextIdx, getShader(contextIdx));
175 }
176 
178  if (Engine::lightingShader != nullptr)
179  Engine::lightingShader->updateShaderParameters(contextIdx);
180 
181  if (Engine::currentEngine->shadowMapping != nullptr)
182  Engine::currentEngine->shadowMapping->updateShaderParameters(contextIdx);
183 }
184 
185 // end point for engine to create renderer
187 {
189  Console::println("EngineGL2Renderer::createInstance(): Engine and renderer version do not match: '" + EngineGL2Renderer::getRendererVersion() + "' != '" + Version::getVersion() + "'");
190  return nullptr;
191  }
192  Console::println("EngineGL2Renderer::createInstance(): Creating EngineGL2Renderer instance");
193  return new EngineGL2Renderer();
194 }
EngineGL2Renderer * 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 GL2 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