Commit: d7f0c33b3d708a6c4ce4aa342c0831ca086fa872
Author: Benoit Bolsee
Date:   Fri Nov 13 18:32:08 2015 +0100
Branches: decklink
https://developer.blender.org/rBd7f0c33b3d708a6c4ce4aa342c0831ca086fa872

Merge remote-tracking branch 'origin' into decklink

Conflicts:
        source/gameengine/Ketsji/BL_Shader.cpp
        source/gameengine/Ketsji/BL_Shader.h

===================================================================



===================================================================

diff --cc source/gameengine/Ketsji/BL_Shader.cpp
index 8c69e6a,4b229f5..0b4a48a
--- a/source/gameengine/Ketsji/BL_Shader.cpp
+++ b/source/gameengine/Ketsji/BL_Shader.cpp
@@@ -81,22 -80,13 +82,22 @@@ bool BL_Uniform::Apply(class BL_Shader 
        switch (mType) {
                case UNI_FLOAT:
                {
-                       float *f = (float*)mData;
-                       glUniform1fARB(mLoc,(GLfloat)*f);
+                       float *f = (float *)mData;
+                       glUniform1fARB(mLoc, (GLfloat)*f);
                        break;
                }
 +              case UNI_FLOAT_EYE:
 +              {
 +                      float *f = (float*)mData;
 +                      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:
                {
-                       int *f = (int*)mData;
+                       int *f = (int *)mData;
                        glUniform1iARB(mLoc, (GLint)*f);
                        break;
                }
@@@ -278,13 -271,15 +282,13 @@@ void BL_Shader::SetUniformiv(int locati
  void BL_Shader::ApplyShader()
  {
  #ifdef SORT_UNIFORMS
-       if (!mDirty) 
+       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
  }
  
@@@ -317,79 -314,74 +323,81 @@@ bool BL_Shader::LinkProgram(
                spit("Vertex shaders not supported");
                return false;
        }
+ 
 -      // -- vertex shader ------------------
 -      tmpVert = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
 -      glShaderSourceARB(tmpVert, 1, (const char **)&vertProg, 0);
 -      glCompileShaderARB(tmpVert);
 -      glGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, 
(GLint *)&vertlen);
 -
 -      // print info if any
 -      if (vertlen > 0 && vertlen < MAX_LOG_LEN) {
 -              logInf = (char *)MEM_mallocN(vertlen, "vert-log");
 -              glGetInfoLogARB(tmpVert, vertlen, (GLsizei *)&char_len, logInf);
 -
 -              if (char_len > 0) {
 -                      spit("---- Vertex Shader Error ----");
 -                      spit(logInf);
 +      if (vertProg[0] != 0)
 +      {
 +              // -- vertex shader ------------------
 +              tmpVert = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
 +              glShaderSourceARB(tmpVert, 1, (const char**)&vertProg, 0);
 +              glCompileShaderARB(tmpVert);
 +              glGetObjectParameterivARB(tmpVert, 
GL_OBJECT_INFO_LOG_LENGTH_ARB, (GLint*)&vertlen);
 +
 +              // print info if any
 +              if (vertlen > 0 && vertlen < MAX_LOG_LEN) {
 +                      logInf = (char*)MEM_mallocN(vertlen, "vert-log");
 +                      glGetInfoLogARB(tmpVert, vertlen, (GLsizei*)&char_len, 
logInf);
 +                      if (char_len > 0) {
 +                              spit("---- Vertex Shader Error ----");
 +                              spit(logInf);
 +                      }
 +                      MEM_freeN(logInf);
 +                      logInf = 0;
 +              }
 +              // check for compile errors
 +              glGetObjectParameterivARB(tmpVert, 
GL_OBJECT_COMPILE_STATUS_ARB, (GLint*)&vertstatus);
 +              if (!vertstatus) {
 +                      spit("---- Vertex shader failed to compile ----");
 +                      goto programError;
                }
 -
 -              MEM_freeN(logInf);
 -              logInf = 0;
 -      }
 -
 -      // check for compile errors
 -      glGetObjectParameterivARB(tmpVert, GL_OBJECT_COMPILE_STATUS_ARB, (GLint 
*)&vertstatus);
 -      if (!vertstatus) {
 -              spit("---- Vertex shader failed to compile ----");
 -              goto programError;
        }
  
 -      // -- fragment shader ----------------
 -      tmpFrag = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
 -      glShaderSourceARB(tmpFrag, 1, (const char **)&fragProg, 0);
 -      glCompileShaderARB(tmpFrag);
 -      glGetObjectParameterivARB(tmpFrag, GL_OBJECT_INFO_LOG_LENGTH_ARB, 
(GLint *)&fraglen);
 -
 -      if (fraglen > 0 && fraglen < MAX_LOG_LEN) {
 -              logInf = (char *)MEM_mallocN(fraglen, "frag-log");
 -              glGetInfoLogARB(tmpFrag, fraglen, (GLsizei *)&char_len, logInf);
 -
 -              if (char_len > 0) {
 -                      spit("---- Fragment Shader Error ----");
 -                      spit(logInf);
 +      if (fragProg[0] != 0)
 +      {
 +              // -- fragment shader ----------------
 +              tmpFrag = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
 +              glShaderSourceARB(tmpFrag, 1, (const char**)&fragProg, 0);
 +              glCompileShaderARB(tmpFrag);
 +              glGetObjectParameterivARB(tmpFrag, 
GL_OBJECT_INFO_LOG_LENGTH_ARB, (GLint*)&fraglen);
 +              if (fraglen > 0 && fraglen < MAX_LOG_LEN) {
 +                      logInf = (char*)MEM_mallocN(fraglen, "frag-log");
 +                      glGetInfoLogARB(tmpFrag, fraglen, (GLsizei*)&char_len, 
logInf);
 +                      if (char_len > 0) {
 +                              spit("---- Fragment Shader Error ----");
 +                              spit(logInf);
 +                      }
 +                      MEM_freeN(logInf);
 +                      logInf = 0;
                }
  
 -              MEM_freeN(logInf);
 -              logInf = 0;
 +              glGetObjectParameterivARB(tmpFrag, 
GL_OBJECT_COMPILE_STATUS_ARB, (GLint*)&fragstatus);
 +              if (!fragstatus) {
 +                      spit("---- Fragment shader failed to compile ----");
 +                      goto programError;
 +              }
        }
 -
 -      glGetObjectParameterivARB(tmpFrag, GL_OBJECT_COMPILE_STATUS_ARB, (GLint 
*)&fragstatus);
 -
 -      if (!fragstatus) {
 -              spit("---- Fragment shader failed to compile ----");
 +      
 +      if (!tmpFrag && !tmpVert)
 +      {
 +              spit("---- No shader given ----");
                goto programError;
        }
+ 
        // -- program ------------------------
-       //  set compiled vert/frag shader & link
+       // set compiled vert/frag shader & link
        tmpProg = glCreateProgramObjectARB();
 -      glAttachObjectARB(tmpProg, tmpVert);
 -      glAttachObjectARB(tmpProg, tmpFrag);
 +      if (tmpVert)
 +              glAttachObjectARB(tmpProg, tmpVert);
 +      if (tmpFrag)
 +              glAttachObjectARB(tmpProg, tmpFrag);
        glLinkProgramARB(tmpProg);
-       glGetObjectParameterivARB(tmpProg, GL_OBJECT_INFO_LOG_LENGTH_ARB, 
(GLint*) &proglen);
-       glGetObjectParameterivARB(tmpProg, GL_OBJECT_LINK_STATUS_ARB, (GLint*) 
&progstatus);
-       
+       glGetObjectParameterivARB(tmpProg, GL_OBJECT_INFO_LOG_LENGTH_ARB, 
(GLint *)&proglen);
+       glGetObjectParameterivARB(tmpProg, GL_OBJECT_LINK_STATUS_ARB, (GLint 
*)&progstatus);
  
        if (proglen > 0 && proglen < MAX_LOG_LEN) {
-               logInf = (char*)MEM_mallocN(proglen, "prog-log");
-               glGetInfoLogARB(tmpProg, proglen, (GLsizei*)&char_len, logInf);
-               if (char_len >0) {
+               logInf = (char *)MEM_mallocN(proglen, "prog-log");
+               glGetInfoLogARB(tmpProg, proglen, (GLsizei *)&char_len, logInf);
+ 
+               if (char_len > 0) {
                        spit("---- GLSL Program ----");
                        spit(logInf);
                }
@@@ -404,11 -397,9 +413,11 @@@
  
        // set
        mShader = tmpProg;
 -      glDeleteObjectARB(tmpVert);
 -      glDeleteObjectARB(tmpFrag);
 +      if (tmpVert)
 +              glDeleteObjectARB(tmpVert);
 +      if (tmpFrag)
 +              glDeleteObjectARB(tmpFrag);
-       mOk             = 1;
+       mOk = 1;
        mError = 0;
        return true;
  
@@@ -793,38 -739,32 +757,33 @@@ void BL_Shader::SetUniform(int uniform
  }
  
  #ifdef WITH_PYTHON
- 
- PyMethodDef BL_Shader::Methods[] = 
- {
+ PyMethodDef BL_Shader::Methods[] = {
        // creation
-       KX_PYMETHODTABLE( BL_Shader, setSource ),
-       KX_PYMETHODTABLE( BL_Shader, delSource ),
-       KX_PYMETHODTABLE( BL_Shader, getVertexProg ),
-       KX_PYMETHODTABLE( BL_Shader, getFragmentProg ),
-       KX_PYMETHODTABLE( BL_Shader, setNumberOfPasses ),
-       KX_PYMETHODTABLE( BL_Shader, validate),
-       /// access functions
-       KX_PYMETHODTABLE( BL_Shader, isValid),
-       KX_PYMETHODTABLE( BL_Shader, setUniformEyef),
-       KX_PYMETHODTABLE( BL_Shader, setUniform1f ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform2f ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform3f ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform4f ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform1i ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform2i ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform3i ),
-       KX_PYMETHODTABLE( BL_Shader, setUniform4i ),
-       KX_PYMETHODTABLE( BL_Shader, setAttrib ),
- 
-       KX_PYMETHODTABLE( BL_Shader, setUniformfv ),
-       KX_PYMETHODTABLE( BL_Shader, setUniformiv ),
-       KX_PYMETHODTABLE( BL_Shader, setUniformDef ),
- 
-       KX_PYMETHODTABLE( BL_Shader, setSampler  ),
-       KX_PYMETHODTABLE( BL_Shader, setUniformMatrix4 ),
-       KX_PYMETHODTABLE( BL_Shader, setUniformMatrix3 ),
- 
-       {NULL,NULL} //Sentinel
+       KX_PYMETHODTABLE(BL_Shader, setSource),
+       KX_PYMETHODTABLE(BL_Shader, delSource),
+       KX_PYMETHODTABLE(BL_Shader, getVertexProg),
+       KX_PYMETHODTABLE(BL_Shader, getFragmentProg),
+       KX_PYMETHODTABLE(BL_Shader, setNumberOfPasses),
+       KX_PYMETHODTABLE(BL_Shader, validate),
+       // access functions
+       KX_PYMETHODTABLE(BL_Shader, isValid),
++      KX_PYMETHODTABLE(BL_Shader, setUniformEyef),
+       KX_PYMETHODTABLE(BL_Shader, setUniform1f),
+       KX_PYMETHODTABLE(BL_Shader, setUniform2f),
+       KX_PYMETHODTABLE(BL_Shader, setUniform3f),
+       KX_PYMETHODTABLE(BL_Shader, setUniform4f),
+       KX_PYMETHODTABLE(BL_Shader, setUniform1i),
+       KX_PYMETHODTABLE(BL_Shader, setUniform2i),
+       KX_PYMETHODTABLE(BL_Shader, setUniform3i),
+       KX_PYMETHODTABLE(BL_Shader, setUniform4i),
+       KX_PYMETHODTABLE(BL_Shader, setAttrib),
+       KX_PYMETHODTABLE(BL_Shader, setUniformfv),
+       KX_PYMETHODTABLE(BL_Shader, setUniformiv),
+       KX_PYMETHODTABLE(BL_Shader, setUniformDef),
+       KX_PYMETHODTABLE(BL_Shader, setSampler),
+       KX_PYMETHODTABLE(BL_Shader, setUniformMatrix4),
+       KX_PYMETHODTABLE(BL_Shader, setUniformMatrix3),
+       {NULL, NULL} //Sentinel
  };
  
  PyAttributeDef BL_Shader::Attributes[] = {
@@@ -1075,31 -1020,7 +1039,30 @@@ KX_PYMETHODDEF_DOC(BL_Shader, setUnifor
        return NULL;
  }
  
- 
 +KX_PYMETHODDEF_DOC(BL_Shader, setUniformEyef, "setUniformEyef(name)")
 +{
 +      if (mError) {
 +              Py_RETURN_NONE;
 +      }
 +      const char *uniform;
 +      float value = 0.0f;
 +      if (PyArg_ParseTuple(args, "s:setUniformEyef", &uniform))
 +      {
 +              int loc = GetUniformLocation(uniform);
 +              if (loc != -1)
 +              {
 +#ifdef SORT_UNIFORMS
 +                      SetUniformfv(loc, BL_Uniform::UNI_FLOAT_EYE, &value, 
sizeof(float));
 +#else
 +                      SetUniform(loc, (int)value);
 +#endif
 +              }
 +              Py_RETURN_NONE;
 +      }
 +      return NULL;
 +}
 +
- KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
+ KX_PYMETHODDEF_DOC(BL_Shader, setUniform1i, "setUniform1i(name, ix)")
  {
        if (mError) {
                Py_RETURN_NONE;
diff --cc source/gameengine/Ketsji/BL_Shader.h
index 2473db6,aef4b42..5de715d
--- a/source/gameengine/Ketsji/BL_Shader.h
+++ b/source/gameengine/Ketsji/BL_Shader.h
@@@ -71,10 -67,11 +68,11 @@@ public
                UNI_MAX
        };
  
-       int GetLocation()       { return mLoc; }
-       void* getData()         { return mData; }
-       
-       
 -      void Apply(class BL_Shader *shader);
++      bool Apply(class BL_Shader *shader);
+       void SetData(int location, int type, bool transpose = false);
+       int GetLocation() { return mLoc; }
+       void *getData() { return mData; }
+ 
  #ifdef WITH_CXX_GUARDEDALLOC
        MEM_CXX_CLASS_ALLOC_FUNCS("GE:BL_Un

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to