TerraForge3D  2.3.1
3D Terrain And Landscape Generator

◆ ReCompileShaders()

void ShadingManager::ReCompileShaders ( )
private

Definition at line 239 of file ShadingManager.cpp.

240{
241 logs.clear();
242 START_PROFILER();
243 sharedMemoryManager->Clear();
244 SNENode *outputNode = static_cast<SNENode *>(shaderNodeEditor->outputNode);
245 outputNode->dataBlobOffset = sharedMemoryManager->AddItem();
246
247 for(auto &it : shaderNodeEditor->nodes)
248 {
249 SNENode *node = static_cast<SNENode *>(it.second);
250 node->dataBlobOffset = sharedMemoryManager->AddItem();
251 }
252
253 outputNode->sharedData = sharedMemoryManager->At(outputNode->dataBlobOffset);
254 outputNode->UpdateShaders();
255
256 for(auto &it : shaderNodeEditor->nodes)
257 {
258 SNENode *node = static_cast<SNENode *>(it.second);
259 node->sharedData = sharedMemoryManager->At(node->dataBlobOffset);
260 node->UpdateShaders();
261 }
262
263 shaderTextureManager->UpdateShaders();
264 PrepVertShader();
265 vertexSource = vsh->GenerateGLSL();
266 PrepGeomShader();
267 geometrySource = gsh->GenerateGLSL();
268 PrepFragShader();
269 fragmentSource = fsh->GenerateGLSL();
270
271 if(optimizeGLSL)
272 {
273 // glslopt_ctx* ctx = glslopt_initialize(glslopt_target::kGlslTargetOpenGL);
274 // glslopt_shader* shader = glslopt_optimize(ctx, glslopt_shader_type::kGlslOptShaderFragment, fragmentSource.data(), 0);
275 // if (glslopt_get_status (shader))
276 // {
277 // fragmentSource = std::string(glslopt_get_output(shader));
278 // }
279 // else
280 // {
281 // logs.push_back(std::string(glslopt_get_log (shader)));
282 // }
283 // glslopt_shader_delete (shader);
284 // glslopt_cleanup (ctx);
285 }
286
287 appState->shaders.terrain = new Shader(vertexSource, fragmentSource, geometrySource);
288 double time = 0.0f;
289 END_PROFILER(time);
290 logs.push_back("Generated & Compiled Shaders in " + std::to_string(time) + "ms");
291}
Definition: Shader.h:7