[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59677] trunk/blender: RenderEngine API: add viewport draw utility functions to bind a GLSL fragment
Brecht Van Lommel
brechtvanlommel at pandora.be
Sat Aug 31 01:49:35 CEST 2013
Revision: 59677
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59677
Author: blendix
Date: 2013-08-30 23:49:35 +0000 (Fri, 30 Aug 2013)
Log Message:
-----------
RenderEngine API: add viewport draw utility functions to bind a GLSL fragment
shader for converting colors from linear to display space, based on the scene
color management settings.
if engine.support_display_space_shader(scene): # test graphics card support
engine.bind_display_space_shader(scene)
# draw pixels ..
engine.unbind_display_space_shader()
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/editors/render/render_internal.c
trunk/blender/source/blender/editors/screen/glutil.c
trunk/blender/source/blender/imbuf/IMB_colormanagement.h
trunk/blender/source/blender/imbuf/intern/colormanagement.c
trunk/blender/source/blender/makesrna/intern/rna_color.c
trunk/blender/source/blender/makesrna/intern/rna_render.c
Modified: trunk/blender/intern/opencolorio/fallback_impl.cc
===================================================================
--- trunk/blender/intern/opencolorio/fallback_impl.cc 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/intern/opencolorio/fallback_impl.cc 2013-08-30 23:49:35 UTC (rev 59677)
@@ -381,6 +381,11 @@
{
}
+bool FallbackImpl::supportGLSLDraw(void)
+{
+ return false;
+}
+
bool FallbackImpl::setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, bool predivide)
{
return false;
Modified: trunk/blender/intern/opencolorio/ocio_capi.cc
===================================================================
--- trunk/blender/intern/opencolorio/ocio_capi.cc 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/intern/opencolorio/ocio_capi.cc 2013-08-30 23:49:35 UTC (rev 59677)
@@ -283,6 +283,11 @@
impl->matrixTransformScale(m44, offset4, scale4f);
}
+int OCIO_supportGLSLDraw(void)
+{
+ return (int) impl->supportGLSLDraw();
+}
+
int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, int predivide)
{
return (int) impl->setupGLSLDraw(state_r, processor, (bool) predivide);
Modified: trunk/blender/intern/opencolorio/ocio_capi.h
===================================================================
--- trunk/blender/intern/opencolorio/ocio_capi.h 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/intern/opencolorio/ocio_capi.h 2013-08-30 23:49:35 UTC (rev 59677)
@@ -121,6 +121,7 @@
void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale4);
+int OCIO_supportGLSLDraw(void);
int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, int predivide);
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-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/intern/opencolorio/ocio_impl.h 2013-08-30 23:49:35 UTC (rev 59677)
@@ -96,6 +96,7 @@
virtual void matrixTransformScale(float * m44, float * offset4, const float * scale4) = 0;
+ virtual bool supportGLSLDraw(void) = 0;
virtual bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, bool predivide) = 0;
virtual void finishGLSLDraw(struct OCIO_GLSLDrawState *state) = 0;
virtual void freeGLState(struct OCIO_GLSLDrawState *state_r) = 0;
@@ -169,6 +170,7 @@
void matrixTransformScale(float * m44, float * offset4, const float * scale4);
+ bool supportGLSLDraw(void);
bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, bool predivide);
void finishGLSLDraw(struct OCIO_GLSLDrawState *state);
void freeGLState(struct OCIO_GLSLDrawState *state_r);
@@ -243,6 +245,7 @@
void matrixTransformScale(float * m44, float * offset4, const float * scale4);
+ bool supportGLSLDraw(void);
bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, bool predivide);
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-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/intern/opencolorio/ocio_impl_glsl.cc 2013-08-30 23:49:35 UTC (rev 59677)
@@ -36,12 +36,7 @@
#include <sstream>
#include <string.h>
-#ifdef __APPLE__
-#include <OpenGL/gl.h>
-#include <OpenGL/glu.h>
-#else
#include <GL/glew.h>
-#endif
#include <OpenColorIO/OpenColorIO.h>
@@ -202,6 +197,13 @@
return state->lut3d_texture_valid;
}
+/* Detect if we can support GLSL drawing */
+bool OCIOImpl::supportGLSLDraw()
+{
+ /* GLSL and GL_RGB16F_ARB */
+ return GLEW_VERSION_2_0 && (GLEW_VERSION_3_0 || GLEW_ARB_texture_float);
+}
+
/**
* Setup OpenGL contexts for a transform defined by processor using GLSL
* All LUT allocating baking and shader compilation happens here.
Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/source/blender/editors/render/render_internal.c 2013-08-30 23:49:35 UTC (rev 59677)
@@ -1125,7 +1125,7 @@
/* Try using GLSL display transform. */
if (force_fallback == false) {
- if (IMB_colormanagement_setup_glsl_draw(NULL, &scene->display_settings, TRUE)) {
+ if (IMB_colormanagement_setup_glsl_draw(NULL, &scene->display_settings, TRUE, FALSE)) {
glEnable(GL_BLEND);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glaDrawPixelsTex(rres.xof, rres.yof, rres.rectx, rres.recty, GL_RGBA, GL_FLOAT,
Modified: trunk/blender/source/blender/editors/screen/glutil.c
===================================================================
--- trunk/blender/source/blender/editors/screen/glutil.c 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/source/blender/editors/screen/glutil.c 2013-08-30 23:49:35 UTC (rev 59677)
@@ -1091,15 +1091,18 @@
if (ibuf->rect_float) {
if (ibuf->float_colorspace) {
ok = IMB_colormanagement_setup_glsl_draw_from_space(view_settings, display_settings,
- ibuf->float_colorspace, TRUE);
+ ibuf->float_colorspace,
+ TRUE, FALSE);
}
else {
- ok = IMB_colormanagement_setup_glsl_draw(view_settings, display_settings, TRUE);
+ ok = IMB_colormanagement_setup_glsl_draw(view_settings, display_settings,
+ TRUE, FALSE);
}
}
else {
ok = IMB_colormanagement_setup_glsl_draw_from_space(view_settings, display_settings,
- ibuf->rect_colorspace, FALSE);
+ ibuf->rect_colorspace,
+ FALSE, FALSE);
}
if (ok) {
Modified: trunk/blender/source/blender/imbuf/IMB_colormanagement.h
===================================================================
--- trunk/blender/source/blender/imbuf/IMB_colormanagement.h 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/source/blender/imbuf/IMB_colormanagement.h 2013-08-30 23:49:35 UTC (rev 59677)
@@ -159,15 +159,20 @@
/* ** OpenGL drawing routines using GLSL for color space transform ** */
+/* Test if GLSL drawing is supported for combination of graphics card and this configuration */
+int IMB_colormanagement_support_glsl_draw(const struct ColorManagedViewSettings *view_settings,
+ int skip_curves);
/* Configures GLSL shader for conversion from scene linear to display space */
int IMB_colormanagement_setup_glsl_draw(const struct ColorManagedViewSettings *view_settings,
const struct ColorManagedDisplaySettings *display_settings,
- int predivide);
+ int predivide,
+ int skip_curves);
/* Same as above, but display space conversion happens from a specified space */
int IMB_colormanagement_setup_glsl_draw_from_space(const struct ColorManagedViewSettings *view_settings,
const struct ColorManagedDisplaySettings *display_settings,
struct ColorSpace *colorspace,
- int predivide);
+ int predivide,
+ int skip_curves);
/* Same as setup_glsl_draw, but color management settings are guessing from a given context */
int IMB_colormanagement_setup_glsl_draw_ctx(const struct bContext *C, int predivide);
/* Same as setup_glsl_draw_from_space, but color management settings are guessing from a given context */
Modified: trunk/blender/source/blender/imbuf/intern/colormanagement.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/colormanagement.c 2013-08-30 23:09:22 UTC (rev 59676)
+++ trunk/blender/source/blender/imbuf/intern/colormanagement.c 2013-08-30 23:49:35 UTC (rev 59677)
@@ -2807,6 +2807,17 @@
}
}
+int IMB_colormanagement_support_glsl_draw(const ColorManagedViewSettings *view_settings,
+ int skip_curves)
+{
+ /* curves not supported yet */
+ if (!skip_curves)
+ if (view_settings && (view_settings->flag & COLORMANAGE_VIEW_USE_CURVES))
+ return 0;
+
+ return OCIO_supportGLSLDraw();
+}
+
/**
* Configures GLSL shader for conversion from specified to
* display color space
@@ -2822,7 +2833,8 @@
*/
int IMB_colormanagement_setup_glsl_draw_from_space(const ColorManagedViewSettings *view_settings,
const ColorManagedDisplaySettings *display_settings,
- struct ColorSpace *from_colorspace, int predivide)
+ struct ColorSpace *from_colorspace, int predivide,
+ int skip_curves)
{
ColorManagedViewSettings default_view_settings;
const ColorManagedViewSettings *applied_view_settings;
@@ -2840,8 +2852,9 @@
}
/* RGB curves mapping is not supported on GPU yet. */
- if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES)
- return FALSE;
+ if (!skip_curves)
+ if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES)
+ return FALSE;
/* Make sure OCIO processor is up-to-date. */
update_glsl_display_processor(applied_view_settings, display_settings,
@@ -2853,10 +2866,10 @@
/* Configures GLSL shader for conversion from scene linear to display space */
int IMB_colormanagement_setup_glsl_draw(const ColorManagedViewSettings *view_settings,
const ColorManagedDisplaySettings *display_settings,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list