[Bf-blender-cvs] [56283d0] decklink: BGE: setUniformEyef need automatic refresh on every frame.
Benoit Bolsee
noreply at git.blender.org
Mon Mar 30 23:06:34 CEST 2015
Commit: 56283d0af8f1f3e22b8cac2a7e068097bb74b870
Author: Benoit Bolsee
Date: Mon Mar 30 23:02:34 2015 +0200
Branches: decklink
https://developer.blender.org/rB56283d0af8f1f3e22b8cac2a7e068097bb74b870
BGE: setUniformEyef need automatic refresh on every frame.
Fix a bug in setUniformEyef implementation where the caching system for
uniform was getting in the way: a 'eye' uniform needs to be updated on
every frame and for each eye in stereo mode.
===================================================================
M source/gameengine/Ketsji/BL_Shader.cpp
M source/gameengine/Ketsji/BL_Shader.h
===================================================================
diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp
index ec6410d..8c69e6a 100644
--- a/source/gameengine/Ketsji/BL_Shader.cpp
+++ b/source/gameengine/Ketsji/BL_Shader.cpp
@@ -68,14 +68,16 @@ BL_Uniform::~BL_Uniform()
#endif
}
-void BL_Uniform::Apply(class BL_Shader *shader)
+bool BL_Uniform::Apply(class BL_Shader *shader)
{
#ifdef SORT_UNIFORMS
+ RAS_IRasterizer *ras;
MT_assert(mType > UNI_NONE && mType < UNI_MAX && mData);
if (!mDirty)
- return;
+ return false;
+ mDirty = false;
switch (mType) {
case UNI_FLOAT:
{
@@ -86,8 +88,11 @@ void BL_Uniform::Apply(class BL_Shader *shader)
case UNI_FLOAT_EYE:
{
float *f = (float*)mData;
- *f = (KX_GetActiveEngine()->GetRasterizer()->GetEye() == RAS_IRasterizer::RAS_STEREO_LEFTEYE) ? 0.0f : 0.5f;
+ ras = KX_GetActiveEngine()->GetRasterizer();
+ *f = (ras->GetEye() == RAS_IRasterizer::RAS_STEREO_LEFTEYE) ? 0.0f : 0.5f;
glUniform1fARB(mLoc, (GLfloat)*f);
+ mDirty = (ras->Stereo()) ? true : false;
+ break;
}
case UNI_INT:
{
@@ -144,7 +149,7 @@ void BL_Uniform::Apply(class BL_Shader *shader)
break;
}
}
- mDirty = false;
+ return mDirty;
#endif
}
@@ -277,10 +282,9 @@ void BL_Shader::ApplyShader()
if (!mDirty)
return;
- for (unsigned int i=0; i<mUniforms.size(); i++)
- mUniforms[i]->Apply(this);
-
mDirty = false;
+ for (unsigned int i=0; i<mUniforms.size(); i++)
+ mDirty |= mUniforms[i]->Apply(this);
#endif
}
diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h
index 539ac4c..29595ba 100644
--- a/source/gameengine/Ketsji/BL_Shader.h
+++ b/source/gameengine/Ketsji/BL_Shader.h
@@ -52,7 +52,7 @@ public:
~BL_Uniform();
- void Apply(class BL_Shader *shader);
+ bool Apply(class BL_Shader *shader);
void SetData(int location, int type, bool transpose=false);
enum UniformTypes {
More information about the Bf-blender-cvs
mailing list