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