Fix multiple crashes when new pipeline is turned off
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@14598 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
@@ -348,7 +348,10 @@ public:
|
||||
// ------------------------------------------------------------------------
|
||||
inline video::E_MATERIAL_TYPE getShader(const ShaderType num) {return m_shaders->getShader(num);}
|
||||
// ------------------------------------------------------------------------
|
||||
inline video::IShaderConstantSetCallBack* getCallback(const ShaderType num) {return m_shaders->m_callbacks[num];}
|
||||
inline video::IShaderConstantSetCallBack* getCallback(const ShaderType num)
|
||||
{
|
||||
return (m_shaders == NULL ? NULL : m_shaders->m_callbacks[num]);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
inline video::ITexture* getRTT(TypeRTT which) {return m_rtts->getRTT(which);}
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
@@ -1013,9 +1013,13 @@ void Material::adjustForFog(scene::ISceneNode* parent, video::SMaterial *m,
|
||||
/** Callback from LOD nodes to create some effects */
|
||||
void Material::onMadeVisible(scene::IMeshBuffer* who)
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
bubble->onMadeVisible(who);
|
||||
|
||||
if (bubble != NULL)
|
||||
bubble->onMadeVisible(who);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -1023,18 +1027,24 @@ void Material::onMadeVisible(scene::IMeshBuffer* who)
|
||||
/** Callback from LOD nodes to create some effects */
|
||||
void Material::onHidden(scene::IMeshBuffer* who)
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
bubble->onHidden(who);
|
||||
if (bubble != NULL)
|
||||
bubble->onHidden(who);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void Material::isInitiallyHidden(scene::IMeshBuffer* who)
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
BubbleEffectProvider * bubble = (BubbleEffectProvider *)
|
||||
irr_driver->getCallback(ES_BUBBLES);
|
||||
bubble->isInitiallyHidden(who);
|
||||
if (bubble != NULL)
|
||||
bubble->isInitiallyHidden(who);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -161,11 +161,14 @@ void PostProcessing::begin()
|
||||
/** Set the boost amount according to the speed of the camera */
|
||||
void PostProcessing::giveBoost(unsigned int camera_index)
|
||||
{
|
||||
m_boost_time[camera_index] = 0.75f;
|
||||
if (irr_driver->isGLSL())
|
||||
{
|
||||
m_boost_time[camera_index] = 0.75f;
|
||||
|
||||
MotionBlurProvider * const cb = (MotionBlurProvider *) irr_driver->
|
||||
getCallback(ES_MOTIONBLUR);
|
||||
cb->setBoostTime(camera_index, m_boost_time[camera_index]);
|
||||
MotionBlurProvider * const cb = (MotionBlurProvider *)irr_driver->
|
||||
getCallback(ES_MOTIONBLUR);
|
||||
cb->setBoostTime(camera_index, m_boost_time[camera_index]);
|
||||
}
|
||||
} // giveBoost
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -174,10 +177,15 @@ void PostProcessing::giveBoost(unsigned int camera_index)
|
||||
*/
|
||||
void PostProcessing::update(float dt)
|
||||
{
|
||||
MotionBlurProvider * const cb = (MotionBlurProvider *) irr_driver->
|
||||
getCallback(ES_MOTIONBLUR);
|
||||
if (!irr_driver->isGLSL())
|
||||
return;
|
||||
|
||||
for(unsigned int i=0; i<m_boost_time.size(); i++)
|
||||
MotionBlurProvider* const cb =
|
||||
(MotionBlurProvider*) irr_driver->getCallback(ES_MOTIONBLUR);
|
||||
|
||||
if (cb == NULL) return;
|
||||
|
||||
for (unsigned int i=0; i<m_boost_time.size(); i++)
|
||||
{
|
||||
if (m_boost_time[i] > 0.0f)
|
||||
{
|
||||
@@ -193,6 +201,8 @@ void PostProcessing::update(float dt)
|
||||
/** Render the post-processed scene, solids only, color to color, no stencil */
|
||||
void PostProcessing::renderSolid(const u32 cam)
|
||||
{
|
||||
if (irr_driver->isGLSL()) return;
|
||||
|
||||
// Early out: do nothing if at all possible
|
||||
if (UserConfigParams::m_ssao < 1 && !World::getWorld()->getTrack()->isFogEnabled())
|
||||
return;
|
||||
@@ -316,6 +326,8 @@ void PostProcessing::renderSolid(const u32 cam)
|
||||
/** Render the post-processed scene */
|
||||
void PostProcessing::render()
|
||||
{
|
||||
if (!irr_driver->isGLSL()) return;
|
||||
|
||||
IVideoDriver * const drv = irr_driver->getVideoDriver();
|
||||
drv->setTransform(ETS_WORLD, core::IdentityMatrix);
|
||||
drv->setTransform(ETS_VIEW, core::IdentityMatrix);
|
||||
|
||||
Reference in New Issue
Block a user