Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorAntonioya <blendergit@gmail.com>2019-01-25 22:40:56 +0300
committerAntonioya <blendergit@gmail.com>2019-01-25 22:40:56 +0300
commitca739ac1d56598333579e996aae9e54f22a47e0d (patch)
tree7293a041f60ac993f327e31642765ba8a35c5c37 /source
parent16c3425fe61220a487aef443e0f58cd07be65c4e (diff)
GP: Apply scale to particles
The particles were using the scale of the original object and the thickness of the stroke was not correct. Now, the scale is applied by particle.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_cache_utils.c1
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_draw_utils.c19
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.h3
3 files changed, 14 insertions, 9 deletions
diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
index 8c825a5ae6e..3c3125a0fd6 100644
--- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
@@ -81,6 +81,7 @@ tGPencilObjectCache *gpencil_object_cache_add(
/* object is duplicated (particle) */
cache_elem->is_dup_ob = ob->base_flag & BASE_FROM_DUPLI;
+ cache_elem->scale = mat4_to_scale(ob->obmat);
/* save FXs */
cache_elem->pixfactor = cache_elem->gpd->pixfactor;
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 27c640cc77a..88ced6a0ac4 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -361,7 +361,8 @@ bool DRW_gpencil_onion_active(bGPdata *gpd)
/* create shading group for strokes */
DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob,
- bGPdata *gpd, bGPDstroke *gps, MaterialGPencilStyle *gp_style, int id, bool onion)
+ bGPdata *gpd, bGPDstroke *gps, MaterialGPencilStyle *gp_style, int id,
+ bool onion, const float scale)
{
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
const float *viewport_size = DRW_viewport_size_get();
@@ -380,7 +381,7 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
/* object scale and depth */
if ((ob) && (id > -1)) {
- stl->shgroups[id].obj_scale = mat4_to_scale(ob->obmat);
+ stl->shgroups[id].obj_scale = scale;
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);
@@ -457,7 +458,7 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
/* create shading group for points */
static DRWShadingGroup *DRW_gpencil_shgroup_point_create(
GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob,
- bGPdata *gpd, MaterialGPencilStyle *gp_style, int id, bool onion)
+ bGPdata *gpd, MaterialGPencilStyle *gp_style, int id, bool onion, const float scale)
{
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
const float *viewport_size = DRW_viewport_size_get();
@@ -475,7 +476,7 @@ static DRWShadingGroup *DRW_gpencil_shgroup_point_create(
/* object scale and depth */
if ((ob) && (id > -1)) {
- stl->shgroups[id].obj_scale = mat4_to_scale(ob->obmat);
+ stl->shgroups[id].obj_scale = scale;
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);
@@ -1191,11 +1192,12 @@ void DRW_gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, void *vedata, T
if ((gp_style) && (gp_style->mode == GP_STYLE_MODE_LINE)) {
stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_stroke_create(
e_data, vedata, psl->drawing_pass, e_data->gpencil_stroke_sh, NULL,
- gpd, NULL, gp_style, -1, false);
+ gpd, NULL, gp_style, -1, false, 1.0f);
}
else {
stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_point_create(
- e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, NULL, gpd, gp_style, -1, false);
+ e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, NULL,
+ gpd, gp_style, -1, false, 1.0f);
}
/* clean previous version of the batch */
@@ -1332,6 +1334,7 @@ static void DRW_gpencil_shgroups_create(
for (int i = 0; i < cache->grp_used; i++) {
elm = &cache->grp_cache[i];
array_elm = &cache_ob->shgrp_array[idx];
+ const float scale = cache_ob->scale;
/* save last group when change */
if (gpl_prev == NULL) {
@@ -1371,7 +1374,7 @@ static void DRW_gpencil_shgroups_create(
shgrp = DRW_gpencil_shgroup_stroke_create(
e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh,
- ob, gpd, gps, gp_style, stl->storage->shgroup_id, elm->onion);
+ ob, gpd, gps, gp_style, stl->storage->shgroup_id, elm->onion, scale);
DRW_shgroup_call_range_add(
shgrp, cache->b_stroke.batch,
@@ -1388,7 +1391,7 @@ static void DRW_gpencil_shgroups_create(
shgrp = DRW_gpencil_shgroup_point_create(
e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh,
- ob, gpd, gp_style, stl->storage->shgroup_id, elm->onion);
+ ob, gpd, gp_style, stl->storage->shgroup_id, elm->onion, scale);
DRW_shgroup_call_range_add(
shgrp, cache->b_point.batch,
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index bd5fd3ed4d7..f6deeae062b 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -95,6 +95,7 @@ typedef struct tGPencilObjectCache {
float obmat[4][4];
float zdepth; /* z-depth value to sort gp object */
bool is_dup_ob; /* flag to tag duplicate objects */
+ float scale;
/* GPU data size */
int tot_vertex;
@@ -369,7 +370,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 bGPDstroke *gps,
- struct MaterialGPencilStyle *gp_style, int id, bool onion);
+ struct MaterialGPencilStyle *gp_style, int id, bool onion, const float scale);
void DRW_gpencil_populate_datablock(
struct GPENCIL_e_data *e_data, void *vedata,
struct Object *ob, struct tGPencilObjectCache *cache_ob);