[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