mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-01 20:36:40 +00:00
Enable microcode caching for Ogre 1.9+
This commit is contained in:
parent
530d06ab54
commit
4bc4af6bf0
1 changed files with 14 additions and 6 deletions
20
extern/shiny/Platforms/Ogre/OgrePlatform.cpp
vendored
20
extern/shiny/Platforms/Ogre/OgrePlatform.cpp
vendored
|
@ -64,8 +64,11 @@ namespace sh
|
||||||
|
|
||||||
bool OgrePlatform::supportsShaderSerialization ()
|
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;
|
return Ogre::Root::getSingleton ().getRenderSystem ()->getName ().find("OpenGL") == std::string::npos;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OgrePlatform::supportsMaterialQueuedListener ()
|
bool OgrePlatform::supportsMaterialQueuedListener ()
|
||||||
|
@ -110,10 +113,15 @@ namespace sh
|
||||||
|
|
||||||
void OgrePlatform::serializeShaders (const std::string& file)
|
void OgrePlatform::serializeShaders (const std::string& file)
|
||||||
{
|
{
|
||||||
std::fstream output;
|
#if OGRE_VERSION >= (1 << 16 | 9 << 8 | 0)
|
||||||
output.open(file.c_str(), std::ios::out | std::ios::binary);
|
if (Ogre::GpuProgramManager::getSingleton().isCacheDirty())
|
||||||
Ogre::DataStreamPtr shaderCache (OGRE_NEW Ogre::FileStreamDataStream(file, &output, false));
|
#endif
|
||||||
Ogre::GpuProgramManager::getSingleton().saveMicrocodeCache(shaderCache);
|
{
|
||||||
|
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)
|
void OgrePlatform::deserializeShaders (const std::string& file)
|
||||||
|
@ -143,7 +151,7 @@ namespace sh
|
||||||
else if (typeid(*value) == typeid(IntValue))
|
else if (typeid(*value) == typeid(IntValue))
|
||||||
type = Ogre::GCT_INT1;
|
type = Ogre::GCT_INT1;
|
||||||
else
|
else
|
||||||
assert(0);
|
throw std::runtime_error("unexpected type");
|
||||||
params->addConstantDefinition(name, type);
|
params->addConstantDefinition(name, type);
|
||||||
mSharedParameters[name] = params;
|
mSharedParameters[name] = params;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue