[Bf-blender-cvs] [d7f0c33] decklink: Merge remote-tracking branch 'origin' into decklink
Benoit Bolsee
noreply at git.blender.org
Fri Nov 13 18:33:28 CET 2015
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. @@
More information about the Bf-blender-cvs
mailing list