Commit: 86cb87c0fadea9b1c0d7b2e0080ed0f66c2c4bfc
Author: Antonio Vazquez
Date:   Tue Feb 13 13:22:34 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB86cb87c0fadea9b1c0d7b2e0080ed0f66c2c4bfc

Chnages to use OCIO

===================================================================

M       source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M       source/blender/draw/engines/gpencil/gpencil_engine.c
M       source/blender/draw/engines/gpencil/gpencil_engine.h
M       source/blender/draw/engines/gpencil/gpencil_geom.c

===================================================================

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 2579b71a58b..57e1e1665bd 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -47,6 +47,7 @@
 #include "DEG_depsgraph.h"
 
 #include "IMB_imbuf_types.h"
+#include "IMB_colormanagement.h"
 
 #include "draw_cache_impl.h"
 #include "gpencil_engine.h"
@@ -523,7 +524,7 @@ DRWShadingGroup 
*DRW_gpencil_shgroup_point_create(GPENCIL_e_data *e_data, GPENCI
 /* add fill shading group to pass */
 static void gpencil_add_fill_shgroup(GpencilBatchCache *cache, DRWShadingGroup 
*fillgrp, 
        Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke 
*gps,
-       const float tintcolor[4], const bool onion, const bool custonion)
+       const float tintcolor[4], const bool onion, const bool custonion, 
ColorSpace *colorspace)
 {
        if (gps->totpoints >= 3) {
                float tfill[4];
@@ -546,7 +547,7 @@ static void gpencil_add_fill_shgroup(GpencilBatchCache 
*cache, DRWShadingGroup *
                        }
                        if (cache->is_dirty) {
                                gpencil_batch_cache_check_free_slots(ob);
-                               cache->batch_fill[cache->cache_idx] = 
DRW_gpencil_get_fill_geom(gps, color);
+                               cache->batch_fill[cache->cache_idx] = 
DRW_gpencil_get_fill_geom(gps, color, colorspace);
                        }
                        DRW_shgroup_call_add(fillgrp, 
cache->batch_fill[cache->cache_idx], gpf->viewmatrix);
                }
@@ -556,7 +557,8 @@ static void gpencil_add_fill_shgroup(GpencilBatchCache 
*cache, DRWShadingGroup *
 /* add stroke shading group to pass */
 static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, 
DRWShadingGroup *strokegrp,
        Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke 
*gps,
-       const float opacity, const float tintcolor[4], const bool onion, const 
bool custonion)
+       const float opacity, const float tintcolor[4], const bool onion, const 
bool custonion,
+       ColorSpace *colorspace)
 {
        float tcolor[4];
        float ink[4];
@@ -590,10 +592,10 @@ static void gpencil_add_stroke_shgroup(GpencilBatchCache 
*cache, DRWShadingGroup
        if (cache->is_dirty) {
                gpencil_batch_cache_check_free_slots(ob);
                if ((gps->totpoints > 1) && ((gps->palcolor->flag & 
PAC_COLOR_DOT) == 0)) {
-                       cache->batch_stroke[cache->cache_idx] = 
DRW_gpencil_get_stroke_geom(gpf, gps, sthickness, ink);
+                       cache->batch_stroke[cache->cache_idx] = 
DRW_gpencil_get_stroke_geom(gpf, gps, sthickness, ink, colorspace);
                }
                else {
-                       cache->batch_stroke[cache->cache_idx] = 
DRW_gpencil_get_point_geom(gps, sthickness, ink);
+                       cache->batch_stroke[cache->cache_idx] = 
DRW_gpencil_get_point_geom(gps, sthickness, ink, colorspace);
                }
        }
        DRW_shgroup_call_add(strokegrp, cache->batch_stroke[cache->cache_idx], 
gpf->viewmatrix);
@@ -672,7 +674,7 @@ static void gpencil_draw_onion_strokes(GpencilBatchCache 
*cache, GPENCIL_e_data
                }
 
                /* stroke */
-               gpencil_add_stroke_shgroup(cache, 
stl->shgroups[id].shgrps_stroke, ob, gpd, gpl, gpf, gps, opacity, tintcolor, 
true, custonion);
+               gpencil_add_stroke_shgroup(cache, 
stl->shgroups[id].shgrps_stroke, ob, gpd, gpl, gpf, gps, opacity, tintcolor, 
true, custonion, NULL);
 
                stl->storage->shgroup_id++;
                cache->cache_idx++;
@@ -696,7 +698,8 @@ static void gpencil_init_evalctx_from_drawctx(const 
DRWContextState *draw_ctx, E
 /* main function to draw strokes */
 static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data 
*e_data, void *vedata, ToolSettings *ts, Object *ob,
        bGPdata *gpd, bGPDlayer *gpl, bGPDframe *src_gpf, bGPDframe 
*derived_gpf,
-       const float opacity, const float tintcolor[4], const bool custonion)
+       const float opacity, const float tintcolor[4], const bool custonion,
+       ColorSpace *colorspace)
 {
        GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
        GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
@@ -807,11 +810,11 @@ static void gpencil_draw_strokes(GpencilBatchCache 
*cache, GPENCIL_e_data *e_dat
                        }
                        /* fill */
                        if ((fillgrp) && (!GP_SIMPLIFY_FILL(ts, playing))) {
-                               gpencil_add_fill_shgroup(cache, fillgrp, ob, 
gpd, gpl, derived_gpf, gps, tintcolor, false, custonion);
+                               gpencil_add_fill_shgroup(cache, fillgrp, ob, 
gpd, gpl, derived_gpf, gps, tintcolor, false, custonion, colorspace);
                        }
                        /* stroke */
                        if (strokegrp) {
-                               gpencil_add_stroke_shgroup(cache, strokegrp, 
ob, gpd, gpl, derived_gpf, gps, opacity, tintcolor, false, custonion);
+                               gpencil_add_stroke_shgroup(cache, strokegrp, 
ob, gpd, gpl, derived_gpf, gps, opacity, tintcolor, false, custonion, 
colorspace);
                        }
                }
 
@@ -1104,7 +1107,7 @@ void DRW_gpencil_populate_multiedit(GPENCIL_e_data 
*e_data, void *vedata, Scene
                        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                                if ((gpf == gpl->actframe) || (gpf->flag & 
GP_FRAME_SELECT)) {
                                        gpencil_draw_strokes(cache, e_data, 
vedata, ts, ob, gpd, gpl, gpf, gpf,
-                                               gpl->opacity, gpl->tintcolor, 
false);
+                                               gpl->opacity, gpl->tintcolor, 
false, NULL);
                                }
                        }
                }
@@ -1112,7 +1115,7 @@ void DRW_gpencil_populate_multiedit(GPENCIL_e_data 
*e_data, void *vedata, Scene
                        gpf = BKE_gpencil_layer_getframe(gpl, CFRA, 0);
                        if (gpf) {
                                gpencil_draw_strokes(cache, e_data, vedata, ts, 
ob, gpd, gpl, gpf, gpf,
-                                       gpl->opacity, gpl->tintcolor, false);
+                                       gpl->opacity, gpl->tintcolor, false, 
NULL);
                        }
                }
 
@@ -1186,7 +1189,7 @@ void DRW_gpencil_populate_datablock(GPENCIL_e_data 
*e_data, void *vedata, Scene
 
                /* draw normal strokes */
                gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, 
gpf, derived_gpf,
-                       gpl->opacity, gpl->tintcolor, false);
+                       gpl->opacity, gpl->tintcolor, false, 
stl->storage->colorspace);
 
        }
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c 
b/source/blender/draw/engines/gpencil/gpencil_engine.c
index d63b1a99723..933259442bf 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -41,6 +41,8 @@
 
 #include "UI_resources.h"
 
+#include "IMB_colormanagement.h"
+
 #include "RE_pipeline.h"
 
 #include "gpencil_engine.h"
@@ -302,6 +304,9 @@ static void GPENCIL_cache_init(void *vedata)
                        stl->storage->pixsize = &stl->storage->render_pixsize;
                }
 
+               /* save color space */
+               stl->storage->colorspace = 
colormanage_colorspace_get_named(colormanage_display_get_default_name());
+
                /* detect if painting session */
                bGPdata *obact_gpd = NULL;
                if ((obact) && (obact->type == OB_GPENCIL) && (obact->data))
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h 
b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 332105d8515..ddab26c8e95 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -31,6 +31,7 @@
 struct tGPspoint;
 struct ModifierData;
 struct GPENCIL_StorageList;
+struct ColorSpace;
 
  /* TODO: these could be system parameter in userprefs screen */
 #define GPENCIL_MAX_GP_OBJ 256 
@@ -175,6 +176,7 @@ typedef struct GPENCIL_Storage {
        float viewmat[4][4], viewinv[4][4];
        float winmat[4][4], wininv[4][4];
        float view_vecs[2][4]; /* vec4[2] */
+       struct ColorSpace *colorspace;
 } GPENCIL_Storage;
 
 typedef struct GPENCIL_StorageList {
@@ -328,9 +330,9 @@ void DRW_gpencil_populate_datablock(struct GPENCIL_e_data 
*e_data, void *vedata,
 void DRW_gpencil_populate_buffer_strokes(struct GPENCIL_e_data *e_data, void 
*vedata, struct ToolSettings *ts, struct Object *ob);
 void DRW_gpencil_populate_multiedit(struct GPENCIL_e_data *e_data, void 
*vedata, struct Scene *scene, struct Object *ob, struct ToolSettings *ts, 
struct bGPdata *gpd);
 
-struct Gwn_Batch *DRW_gpencil_get_point_geom(struct bGPDstroke *gps, short 
thickness, const float ink[4]);
-struct Gwn_Batch *DRW_gpencil_get_stroke_geom(struct bGPDframe *gpf, struct 
bGPDstroke *gps, short thickness, const float ink[4]);
-struct Gwn_Batch *DRW_gpencil_get_fill_geom(struct bGPDstroke *gps, const 
float color[4]);
+struct Gwn_Batch *DRW_gpencil_get_point_geom(struct bGPDstroke *gps, short 
thickness, const float ink[4], struct ColorSpace *colorspace);
+struct Gwn_Batch *DRW_gpencil_get_stroke_geom(struct bGPDframe *gpf, struct 
bGPDstroke *gps, short thickness, const float ink[4], struct ColorSpace 
*colorspace);
+struct Gwn_Batch *DRW_gpencil_get_fill_geom(struct bGPDstroke *gps, const 
float color[4], struct ColorSpace *colorspace);
 struct Gwn_Batch *DRW_gpencil_get_edit_geom(struct bGPDstroke *gps, float 
alpha, short dflag);
 struct Gwn_Batch *DRW_gpencil_get_edlin_geom(struct bGPDstroke *gps, float 
alpha, short dflag);
 struct Gwn_Batch *DRW_gpencil_get_buffer_stroke_geom(struct bGPdata *gpd, 
float matrix[4][4], short thickness);
diff --git a/source/blender/draw/engines/gpencil/gpencil_geom.c 
b/source/blender/draw/engines/gpencil/gpencil_geom.c
index da0694b4812..727c347850d 100644
--- a/source/blender/draw/engines/gpencil/gpencil_geom.c
+++ b/source/blender/draw/engines/gpencil/gpencil_geom.c
@@ -48,17 +48,16 @@
 
 #include "UI_resources.h"
 
+#include "IMB_colormanagement.h"
+
 #include "gpencil_engine.h"
 
 /* helper to convert color space to linear */
-static void gpencil_linear_colorspace(const float color[4], float r_color[4])
+static void gpencil_linear_colorspace(const float color[4], ColorSpace 
*colorspace, float r_color[4])
 {
-       const char *display_device;
-       const DRWContextState *draw_ctx = DRW_context_state_get();
-       Scene *scene = draw_ctx->scene;
-
-       display_device = scene->display_settings.display_device;
-       if ((DRW_state_is_image_render()) && (STREQ(display_device, "sRGB"))) {
+       if ((DRW_state_is_image_render()) && (colorspace != NULL)) { 
+               copy_v4_v4(r_color, color);
+               IMB_colormanagement_colorspace_to_scene_linear_v4(r_color, 
false, colorspace);
                srgb_to_linearrgb_v4(r_color, color);
        }
        else {
@@ -71,7 +70,7 @@ static void gpencil_set_stroke_point(
         Gwn_VertBuf *vbo, float matrix[4][4], const bGPDspoint *pt, int idx,
         uint pos_id, uint color_id,
         uint thickness_id, short thickness,
-        const float ink[4])
+        const float ink[4], ColorSpace *colorspace)
 {
        float viewfpt[3];
        float space_color[4];
@@ -81,7 +80,7 @@ static void gpencil_set_stroke_point(
        flo

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to