Skip to content

Commit

Permalink
Enable microcode caching for Ogre 1.9+
Browse files Browse the repository at this point in the history
  • Loading branch information
scrawl committed Dec 14, 2013
1 parent 530d06a commit 4bc4af6
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions extern/shiny/Platforms/Ogre/OgrePlatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,11 @@ namespace sh

bool OgrePlatform::supportsShaderSerialization ()
{
// Not very reliable in OpenGL mode (requires extension), and somehow doesn't work on linux even if the extension is present
#if OGRE_VERSION >= (1 << 16 | 9 << 8 | 0)
return true;
#else
return Ogre::Root::getSingleton ().getRenderSystem ()->getName ().find("OpenGL") == std::string::npos;
#endif
}

bool OgrePlatform::supportsMaterialQueuedListener ()
Expand Down Expand Up @@ -110,10 +113,15 @@ namespace sh

void OgrePlatform::serializeShaders (const std::string& file)
{
std::fstream output;
output.open(file.c_str(), std::ios::out | std::ios::binary);
Ogre::DataStreamPtr shaderCache (OGRE_NEW Ogre::FileStreamDataStream(file, &output, false));
Ogre::GpuProgramManager::getSingleton().saveMicrocodeCache(shaderCache);
#if OGRE_VERSION >= (1 << 16 | 9 << 8 | 0)
if (Ogre::GpuProgramManager::getSingleton().isCacheDirty())
#endif
{
std::fstream output;
output.open(file.c_str(), std::ios::out | std::ios::binary);
Ogre::DataStreamPtr shaderCache (OGRE_NEW Ogre::FileStreamDataStream(file, &output, false));
Ogre::GpuProgramManager::getSingleton().saveMicrocodeCache(shaderCache);
}
}

void OgrePlatform::deserializeShaders (const std::string& file)
Expand Down Expand Up @@ -143,7 +151,7 @@ namespace sh
else if (typeid(*value) == typeid(IntValue))
type = Ogre::GCT_INT1;
else
assert(0);
throw std::runtime_error("unexpected type");
params->addConstantDefinition(name, type);
mSharedParameters[name] = params;
}
Expand Down

0 comments on commit 4bc4af6

Please sign in to comment.