[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55732] trunk/blender: Fixes for recent GLSL display space conversions
Sergey Sharybin
sergey.vfx at gmail.com
Tue Apr 2 19:28:29 CEST 2013
Revision: 55732
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55732
Author: nazgul
Date: 2013-04-02 17:28:29 +0000 (Tue, 02 Apr 2013)
Log Message:
-----------
Fixes for recent GLSL display space conversions
- Building without OCIO will give correct results again
- If GLSL failed to compile, fallback to glaDrawPixelsAuto
will happen.
Modified Paths:
--------------
trunk/blender/intern/opencolorio/fallback_impl.cc
trunk/blender/intern/opencolorio/ocio_capi.cc
trunk/blender/intern/opencolorio/ocio_capi.h
trunk/blender/intern/opencolorio/ocio_impl.h
trunk/blender/intern/opencolorio/ocio_impl_glsl.cc
trunk/blender/source/blender/imbuf/intern/colormanagement.c
Modified: trunk/blender/intern/opencolorio/fallback_impl.cc
===================================================================
--- trunk/blender/intern/opencolorio/fallback_impl.cc 2013-04-02 17:12:21 UTC (rev 55731)
+++ trunk/blender/intern/opencolorio/fallback_impl.cc 2013-04-02 17:28:29 UTC (rev 55732)
@@ -381,8 +381,9 @@
{
}
-void FallbackImpl::setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor)
+bool FallbackImpl::setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor)
{
+ return false;
}
void FallbackImpl::finishGLSLDraw(OCIO_GLSLDrawState *state)
Modified: trunk/blender/intern/opencolorio/ocio_capi.cc
===================================================================
--- trunk/blender/intern/opencolorio/ocio_capi.cc 2013-04-02 17:12:21 UTC (rev 55731)
+++ trunk/blender/intern/opencolorio/ocio_capi.cc 2013-04-02 17:28:29 UTC (rev 55732)
@@ -283,9 +283,9 @@
impl->matrixTransformScale(m44, offset4, scale4f);
}
-void OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor)
+int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor)
{
- impl->setupGLSLDraw(state_r, processor);
+ return (int) impl->setupGLSLDraw(state_r, processor);
}
void OCIO_finishGLSLDraw(struct OCIO_GLSLDrawState *state)
Modified: trunk/blender/intern/opencolorio/ocio_capi.h
===================================================================
--- trunk/blender/intern/opencolorio/ocio_capi.h 2013-04-02 17:12:21 UTC (rev 55731)
+++ trunk/blender/intern/opencolorio/ocio_capi.h 2013-04-02 17:28:29 UTC (rev 55732)
@@ -121,7 +121,7 @@
void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale4);
-void OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor);
+int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor);
void OCIO_finishGLSLDraw(struct OCIO_GLSLDrawState *state);
void OCIO_freeOGLState(struct OCIO_GLSLDrawState *state);
Modified: trunk/blender/intern/opencolorio/ocio_impl.h
===================================================================
--- trunk/blender/intern/opencolorio/ocio_impl.h 2013-04-02 17:12:21 UTC (rev 55731)
+++ trunk/blender/intern/opencolorio/ocio_impl.h 2013-04-02 17:28:29 UTC (rev 55732)
@@ -96,7 +96,7 @@
virtual void matrixTransformScale(float * m44, float * offset4, const float * scale4) = 0;
- virtual void setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor) = 0;
+ virtual bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor) = 0;
virtual void finishGLSLDraw(struct OCIO_GLSLDrawState *state) = 0;
virtual void freeGLState(struct OCIO_GLSLDrawState *state_r) = 0;
};
@@ -169,7 +169,7 @@
void matrixTransformScale(float * m44, float * offset4, const float * scale4);
- void setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor);
+ bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor);
void finishGLSLDraw(struct OCIO_GLSLDrawState *state);
void freeGLState(struct OCIO_GLSLDrawState *state_r);
};
@@ -243,7 +243,7 @@
void matrixTransformScale(float * m44, float * offset4, const float * scale4);
- void setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor);
+ bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor);
void finishGLSLDraw(struct OCIO_GLSLDrawState *state);
void freeGLState(struct OCIO_GLSLDrawState *state_r);
};
Modified: trunk/blender/intern/opencolorio/ocio_impl_glsl.cc
===================================================================
--- trunk/blender/intern/opencolorio/ocio_impl_glsl.cc 2013-04-02 17:12:21 UTC (rev 55731)
+++ trunk/blender/intern/opencolorio/ocio_impl_glsl.cc 2013-04-02 17:28:29 UTC (rev 55732)
@@ -187,7 +187,7 @@
* When all drawing is finished, finishGLSLDraw shall be called to
* restore OpenGL context to it's pre-GLSL draw state.
*/
-void OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor)
+bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor)
{
ConstProcessorRcPtr ocio_processor = *(ConstProcessorRcPtr *) processor;
@@ -232,22 +232,35 @@
if (state->fragShader)
glDeleteShader(state->fragShader);
+
state->fragShader = compileShaderText(GL_FRAGMENT_SHADER, os.str().c_str());
- if (state->program)
- glDeleteProgram(state->program);
+ if (state->fragShader) {
+ if (state->program)
+ glDeleteProgram(state->program);
- state->program = linkShaders(state->fragShader);
+ state->program = linkShaders(state->fragShader);
+ }
}
- glActiveTexture(GL_TEXTURE1);
- glBindTexture(GL_TEXTURE_3D, state->lut3d_texture);
+ if (state->program) {
+ glActiveTexture(GL_TEXTURE1);
+ glBindTexture(GL_TEXTURE_3D, state->lut3d_texture);
- glActiveTexture(GL_TEXTURE0);
+ glActiveTexture(GL_TEXTURE0);
- glUseProgram(state->program);
- glUniform1i(glGetUniformLocation(state->program, "tex1"), 0);
- glUniform1i(glGetUniformLocation(state->program, "tex2"), 1);
+ glUseProgram(state->program);
+ glUniform1i(glGetUniformLocation(state->program, "tex1"), 0);
+ glUniform1i(glGetUniformLocation(state->program, "tex2"), 1);
+
+ return true;
+ }
+ else {
+ glActiveTexture(state->last_texture_unit);
+ glBindTexture(GL_TEXTURE_2D, state->last_texture);
+
+ return false;
+ }
}
void OCIOImpl::finishGLSLDraw(OCIO_GLSLDrawState *state)
@@ -267,6 +280,12 @@
if (state->lut3d)
MEM_freeN(state->lut3d);
+ if (state->program)
+ glDeleteProgram(state->program);
+
+ if (state->fragShader)
+ glDeleteShader(state->fragShader);
+
state->lut3dcacheid.~string();
state->shadercacheid.~string();
Modified: trunk/blender/source/blender/imbuf/intern/colormanagement.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/colormanagement.c 2013-04-02 17:12:21 UTC (rev 55731)
+++ trunk/blender/source/blender/imbuf/intern/colormanagement.c 2013-04-02 17:28:29 UTC (rev 55732)
@@ -2775,9 +2775,7 @@
/* Make sure OCIO processor is up-to-date. */
update_glsl_display_processor(applied_view_settings, display_settings);
- OCIO_setupGLSLDraw(&global_glsl_state.ocio_glsl_state, global_glsl_state.processor);
-
- return TRUE;
+ return OCIO_setupGLSLDraw(&global_glsl_state.ocio_glsl_state, global_glsl_state.processor);
}
int IMB_coloemanagement_setup_glsl_draw_from_ctx(const bContext *C)
More information about the Bf-blender-cvs
mailing list