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 {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to