Commit: 0b5d287b83d7d3f4d0db4ee737e39fb295d832ea
Author: Antonio Vazquez
Date:   Tue Jul 4 12:41:44 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB0b5d287b83d7d3f4d0db4ee737e39fb295d832ea

Reorganize stroke materials panel

The stroke style now has only solid or volumetric type and the texture and 
pattern have been moved as options shared by both styles.

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

M       release/scripts/startup/bl_ui/properties_grease_pencil_common.py
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/shaders/gpencil_point_frag.glsl
M       source/blender/draw/engines/gpencil/shaders/gpencil_point_vert.glsl
M       source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
M       source/blender/makesdna/DNA_brush_types.h
M       source/blender/makesrna/intern/rna_palette.c

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

diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py 
b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index de32b045aee..f5c8f575386 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -1141,12 +1141,23 @@ class GreasePencilPaletteColorPanel:
         col = split.column(align=True)
         col.enabled = not pcolor.lock
         col.label(text="Stroke:")
-        if pcolor.stroke_style != 'TEXTURE':
-            col.prop(pcolor, "color", text="")
-            col.prop(pcolor, "alpha", slider=True)
         col.prop(pcolor, "stroke_style", text="")
-        if pcolor.stroke_style in ('TEXTURE', 'PATTERN'):
-            col.template_ID(pcolor, "stroke_image", open="image.open")
+
+        row = layout.row()
+        col = row.column(align=True)
+        col.enabled = pcolor.use_texture is False or pcolor.use_pattern is True
+        col.prop(pcolor, "color", text="")
+        col.prop(pcolor, "alpha", slider=True)
+
+        box = layout.box()
+        row = box.row(align=True)
+        row.prop(pcolor, "use_texture", text="Texture")
+
+        row = box.row()
+        col = row.column(align=True)
+        col.enabled = pcolor.use_texture
+        col.template_ID(pcolor, "stroke_image", open="image.open")
+        col.prop(pcolor, "use_pattern", text="Use as Pattern")
 
         # Column 2 - Fill
         row = layout.row()
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 93f6d7b3c05..ee7a12ae46e 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -308,14 +308,23 @@ DRWShadingGroup 
*DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENC
                DRW_shgroup_uniform_int(grp, "keep_size", 
&stl->shgroups[id].keep_size, 1);
 
                stl->shgroups[id].stroke_style = palcolor->stroke_style;
-               DRW_shgroup_uniform_int(grp, "stroke_type", 
&stl->shgroups[id].stroke_style, 1);
+               stl->shgroups[id].color_type = GPENCIL_COLOR_SOLID;
+               if (palcolor->flag & PAC_COLOR_TEXTURE) {
+                       if (palcolor->flag & PAC_COLOR_PATTERN) {
+                               stl->shgroups[id].color_type = 
GPENCIL_COLOR_PATTERN;
+                       }
+                       else {
+                               stl->shgroups[id].color_type = 
GPENCIL_COLOR_TEXTURE;
+                       }
+               }
+               DRW_shgroup_uniform_int(grp, "color_type", 
&stl->shgroups[id].color_type, 1);
        }
        else {
                stl->storage->obj_scale = 1.0f;
                stl->storage->keep_size = 0;
                DRW_shgroup_uniform_float(grp, "objscale", 
&stl->storage->obj_scale, 1);
                DRW_shgroup_uniform_int(grp, "keep_size", 
&stl->storage->keep_size, 1);
-               DRW_shgroup_uniform_int(grp, "stroke_type", 
&stl->storage->stroke_style, 1);
+               DRW_shgroup_uniform_int(grp, "color_type", 
&stl->storage->color_type, 1);
        }
 
        if (gpd) {
@@ -327,7 +336,7 @@ DRWShadingGroup 
*DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENC
        }
 
        /* image texture for pattern */
-       if ((palcolor) && ((palcolor->stroke_style == STROKE_STYLE_TEXTURE) || 
(palcolor->stroke_style == STROKE_STYLE_PATTERN))) {
+       if ((palcolor) && (palcolor->flag & (PAC_COLOR_TEXTURE | 
PAC_COLOR_PATTERN))) {
                ImBuf *ibuf;
                Image *image = palcolor->sima;
                ImageUser iuser = { NULL };
@@ -357,7 +366,7 @@ DRWShadingGroup 
*DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENC
 }
 
 /* create shading group for volumetrics */
-DRWShadingGroup *DRW_gpencil_shgroup_point_create(GPENCIL_Data *vedata, 
DRWPass *pass, GPUShader *shader, Object *ob,
+DRWShadingGroup *DRW_gpencil_shgroup_point_create(GPENCIL_e_data *e_data, 
GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob,
        bGPdata *gpd, PaletteColor *palcolor, int id)
 {
        GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
@@ -377,12 +386,26 @@ DRWShadingGroup 
*DRW_gpencil_shgroup_point_create(GPENCIL_Data *vedata, DRWPass
                DRW_shgroup_uniform_float(grp, "objscale", 
&stl->shgroups[id].obj_scale, 1);
                stl->shgroups[id].keep_size = (int)((gpd) && (gpd->flag & 
GP_DATA_STROKE_KEEPTHICKNESS));
                DRW_shgroup_uniform_int(grp, "keep_size", 
&stl->shgroups[id].keep_size, 1);
+
+               stl->shgroups[id].stroke_style = palcolor->stroke_style;
+               stl->shgroups[id].color_type = GPENCIL_COLOR_SOLID;
+               if (palcolor->flag & PAC_COLOR_TEXTURE) {
+                       if (palcolor->flag & PAC_COLOR_PATTERN) {
+                               stl->shgroups[id].color_type = 
GPENCIL_COLOR_PATTERN;
+                       }
+                       else {
+                               stl->shgroups[id].color_type = 
GPENCIL_COLOR_TEXTURE;
+                       }
+               }
+               DRW_shgroup_uniform_int(grp, "color_type", 
&stl->shgroups[id].color_type, 1);
+
        }
        else {
                stl->storage->obj_scale = 1.0f;
                stl->storage->keep_size = 0;
                DRW_shgroup_uniform_float(grp, "objscale", 
&stl->storage->obj_scale, 1);
                DRW_shgroup_uniform_int(grp, "keep_size", 
&stl->storage->keep_size, 1);
+               DRW_shgroup_uniform_int(grp, "color_type", 
&stl->storage->color_type, 1);
        }
 
        if (gpd) {
@@ -393,6 +416,32 @@ DRWShadingGroup 
*DRW_gpencil_shgroup_point_create(GPENCIL_Data *vedata, DRWPass
                DRW_shgroup_uniform_int(grp, "xraymode", &stl->storage->xray, 
1);
        }
 
+       /* image texture */
+       if ((palcolor) && (palcolor->flag & (PAC_COLOR_TEXTURE | 
PAC_COLOR_PATTERN))) {
+               ImBuf *ibuf;
+               Image *image = palcolor->sima;
+               ImageUser iuser = { NULL };
+               void *lock;
+
+               iuser.ok = true;
+
+               ibuf = BKE_image_acquire_ibuf(image, &iuser, &lock);
+
+               if (ibuf == NULL || ibuf->rect == NULL) {
+                       BKE_image_release_ibuf(image, ibuf, NULL);
+               }
+               else {
+                       GPUTexture *texture = 
GPU_texture_from_blender(palcolor->sima, &iuser, GL_TEXTURE_2D, true, 0.0, 0);
+                       DRW_shgroup_uniform_texture(grp, "myTexture", texture);
+
+                       BKE_image_release_ibuf(image, ibuf, NULL);
+               }
+       }
+       else {
+               /* if no texture defined, need a blank texture to avoid errors 
in draw manager */
+               DRW_shgroup_uniform_texture(grp, "myTexture", 
e_data->gpencil_blank_texture);
+       }
+
        return grp;
 }
 
@@ -555,7 +604,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, 
GPENCIL_e_data *e_dat
                }
                else {
                        stl->shgroups[id].shgrps_fill = NULL;
-                       stl->shgroups[id].shgrps_stroke = 
DRW_gpencil_shgroup_point_create(vedata, psl->stroke_pass, 
e_data->gpencil_point_sh, ob, gpd, gps->palcolor, id);
+                       stl->shgroups[id].shgrps_stroke = 
DRW_gpencil_shgroup_point_create(e_data, vedata, psl->stroke_pass, 
e_data->gpencil_point_sh, ob, gpd, gps->palcolor, id);
                }
                ++stl->storage->shgroup_id;
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c 
b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 70b9a72cf21..9a0eace5a30 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -170,18 +170,29 @@ static void GPENCIL_cache_init(void *vedata)
                PaletteColor *palcolor = BKE_palette_color_get_active(palette);
                if (palcolor) {
                        stl->storage->stroke_style = palcolor->stroke_style;
+                       if (palcolor->flag & PAC_COLOR_TEXTURE) {
+                               if (palcolor->flag & PAC_COLOR_PATTERN) {
+                                       stl->storage->color_type = 
GPENCIL_COLOR_PATTERN;
+                               }
+                               else {
+                                       stl->storage->color_type = 
GPENCIL_COLOR_TEXTURE;
+                               }
+                       }
+                       else {
+                               stl->storage->color_type = GPENCIL_COLOR_SOLID;
+                       }
                }
                else { 
                        stl->storage->stroke_style = STROKE_STYLE_SOLID; 
+                       stl->storage->color_type = GPENCIL_COLOR_SOLID;
                }
 
-
                psl->drawing_pass = DRW_pass_create("Gpencil Drawing Pass", 
DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND);
                if (stl->storage->stroke_style != STROKE_STYLE_VOLUMETRIC) {
                        stl->g_data->shgrps_drawing_stroke = 
DRW_gpencil_shgroup_stroke_create(&e_data, vedata, psl->drawing_pass, 
e_data.gpencil_stroke_sh, NULL, NULL, palcolor, -1);
                }
                else {
-                       stl->g_data->shgrps_drawing_stroke = 
DRW_gpencil_shgroup_point_create(vedata, psl->drawing_pass, 
e_data.gpencil_point_sh, NULL, NULL, palcolor, -1);
+                       stl->g_data->shgrps_drawing_stroke = 
DRW_gpencil_shgroup_point_create(&e_data, vedata, psl->drawing_pass, 
e_data.gpencil_point_sh, NULL, NULL, palcolor, -1);
                }
 
                stl->g_data->shgrps_drawing_fill = 
DRW_gpencil_shgroup_drawing_fill_create(psl->drawing_pass, 
e_data.gpencil_drawing_fill_sh);
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h 
b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 183f35d3eed..4334ec7b859 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -35,6 +35,10 @@ struct tGPspoint;
 #define GPENCIL_MAX_SHGROUPS 65536
 #define GPENCIL_MIN_BATCH_SLOTS_CHUNK 8
 
+#define GPENCIL_COLOR_SOLID   0
+#define GPENCIL_COLOR_TEXTURE 1
+#define GPENCIL_COLOR_PATTERN 2
+
  /* *********** OBJECTS CACHE *********** */
  /* used to save gpencil objects */
 typedef struct tGPencilObjectCache {
@@ -47,6 +51,7 @@ typedef struct tGPencilObjectCache {
 typedef struct GPENCIL_shgroup {
        int s_clamp;
        int stroke_style;
+       int color_type;
        int t_mix;
        int t_flip;
        int t_clamp;
@@ -61,6 +66,7 @@ typedef struct GPENCIL_Storage {
        int shgroup_id; /* total elements */
        float unit_matrix[4][4];
        int stroke_style;
+       int color_type;
        int xray;
        int keep_size;
        float obj_scale;
@@ -149,7 +155,7 @@ typedef struct GpencilBatchCache {
 
 struct DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(struct 
GPENCIL_e_data *e_data, struct GPENCIL_Data *vedata, struct DRWPass *pass, 
struct GPUShader *shader, struct Object *ob,
                                                              struct bGPdata 
*gpd, struct PaletteColor *palcolor, int id);
-struct DRWShadingGroup *DRW_gpencil_shgroup_point_create(struct GPENCIL_Data 
*vedata, struct DRWPass *pass, struct GPUShader *shader, struct Object *ob,
+struct DRWShadingGroup *DRW_gpencil_shgroup_point_create(struct GPENCIL_e_data 
*e_data, struct GPENCIL_Data *vedata, struct DRWPass *pass, struct GPUShader 
*shader, struct Object *ob,
                                                             struct bGPdata 
*gpd, struct PaletteColor *palcolor, int id);
 struct DRWShadingGroup *DRW_gpencil_shgroup_point_volumetric_create(struct 
DRWPass *pass, struct GPUShader *shader);
 struct DRWShadingGroup *DRW_gpencil_shgroup_edit_volumetric_create(struct 
DRWPass *pass, struct GPUShade

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to