Make suspending viewer threads the responsibility of the caller, not the shader manager.

pull/1547/head
AnyOldName3 7 years ago
parent 229cc9696f
commit b08938485f

@ -244,7 +244,8 @@ namespace MWRender
for (auto itr = shadowDefines.begin(); itr != shadowDefines.end(); itr++) for (auto itr = shadowDefines.begin(); itr != shadowDefines.end(); itr++)
globalDefines[itr->first] = itr->second; globalDefines[itr->first] = itr->second;
mResourceSystem->getSceneManager()->getShaderManager().setGlobalDefines(globalDefines, mViewer); // It is unnecessary to stop/start the viewer as no frames are being rendered yet.
mResourceSystem->getSceneManager()->getShaderManager().setGlobalDefines(globalDefines);
mPathgrid.reset(new Pathgrid(mRootNode)); mPathgrid.reset(new Pathgrid(mRootNode));

@ -337,12 +337,9 @@ namespace Shader
return DefineMap(mGlobalDefines); return DefineMap(mGlobalDefines);
} }
void ShaderManager::setGlobalDefines(DefineMap & defines, osg::ref_ptr<osgViewer::Viewer> viewer) void ShaderManager::setGlobalDefines(DefineMap & globalDefines)
{ {
mGlobalDefines = defines; mGlobalDefines = globalDefines;
bool threadsStarted = viewer->areThreadsRunning();
if (threadsStarted)
viewer->stopThreading();
for (auto shaderMapElement: mShaders) for (auto shaderMapElement: mShaders)
{ {
std::string templateId = shaderMapElement.first.first; std::string templateId = shaderMapElement.first.first;
@ -358,8 +355,6 @@ namespace Shader
continue; continue;
shader->setShaderSource(shaderSource); shader->setShaderSource(shaderSource);
} }
if (threadsStarted)
viewer->startThreading();
} }
void ShaderManager::releaseGLObjects(osg::State *state) void ShaderManager::releaseGLObjects(osg::State *state)

@ -39,7 +39,8 @@ namespace Shader
/// Set the DefineMap used to construct all shaders /// Set the DefineMap used to construct all shaders
/// @param defines The DefineMap to use /// @param defines The DefineMap to use
void setGlobalDefines(DefineMap & defines, osg::ref_ptr<osgViewer::Viewer> viewer); /// @note This will change the source code for any shaders already created, potentially causing problems if they're being used to render a frame. It is recommended that any associated Viewers have their threading stopped while this function is running if any shaders are in use.
void setGlobalDefines(DefineMap & globalDefines);
void releaseGLObjects(osg::State* state); void releaseGLObjects(osg::State* state);

Loading…
Cancel
Save