[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