[Bf-blender-cvs] [090127099de] greasepencil-refactor: GPencil: Refactor: Quick implementation of object matrices
Clément Foucault
noreply at git.blender.org
Mon Dec 9 02:30:49 CET 2019
Commit: 090127099de161205ce43fac00baa1eac0b5eb1d
Author: Clément Foucault
Date: Mon Dec 9 02:28:06 2019 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB090127099de161205ce43fac00baa1eac0b5eb1d
GPencil: Refactor: Quick implementation of object matrices
This is just for testing. Not the final implementation
===================================================================
M source/blender/draw/engines/gpencil/gpencil_engine.c
M source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
===================================================================
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 1870aa816d2..2818434b7b7 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -751,6 +751,10 @@ static void gp_layer_cache_populate(bGPDlayer *layer,
struct GPUShader *sh = GPENCIL_shader_geometry_get(&en_data);
iter->grp = DRW_shgroup_create(sh, tgp_layer->geom_ps);
+ DRW_shgroup_uniform_vec4_copy(iter->grp, "gpModelMatrix[0]", iter->ob->obmat[0]);
+ DRW_shgroup_uniform_vec4_copy(iter->grp, "gpModelMatrix[1]", iter->ob->obmat[1]);
+ DRW_shgroup_uniform_vec4_copy(iter->grp, "gpModelMatrix[2]", iter->ob->obmat[2]);
+ DRW_shgroup_uniform_vec4_copy(iter->grp, "gpModelMatrix[3]", iter->ob->obmat[3]);
DRW_shgroup_uniform_vec2_copy(iter->grp, "sizeViewportInv", DRW_viewport_invert_size_get());
DRW_shgroup_uniform_vec2_copy(iter->grp, "sizeViewport", DRW_viewport_size_get());
DRW_shgroup_uniform_float_copy(iter->grp, "thicknessScale", object_scale);
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
index b9abd914926..acd92000ec7 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
@@ -4,6 +4,7 @@ uniform vec2 sizeViewport;
uniform vec2 sizeViewportInv;
/* Per Object */
+uniform vec4 gpModelMatrix[4];
uniform float thicknessScale;
uniform float thicknessWorldScale;
#define thicknessIsScreenSpace (thicknessWorldScale < 0.0)
@@ -38,6 +39,16 @@ vec2 rotate_90deg(vec2 v)
return vec2(-v.y, v.x);
}
+mat4 model_matrix_get()
+{
+ return mat4(gpModelMatrix[0], gpModelMatrix[1], gpModelMatrix[2], gpModelMatrix[3]);
+}
+
+vec3 transform_point(mat4 m, vec3 v)
+{
+ return (m * vec4(v, 1.0)).xyz;
+}
+
void stroke_vertex()
{
/* Enpoints, we discard the vertices. */
@@ -46,13 +57,15 @@ void stroke_vertex()
return;
}
+ mat4 model_mat = model_matrix_get();
+
/* Avoid using a vertex attrib for quad positioning. */
float x = float(gl_VertexID & 1); /* [0..1] */
float y = float(gl_VertexID & 2) - 1.0; /* [-1..1] */
- vec3 wpos_adj = (x == 0.0) ? pos.xyz : pos3.xyz;
- vec3 wpos1 = pos1.xyz;
- vec3 wpos2 = pos2.xyz;
+ vec3 wpos_adj = transform_point(model_mat, (x == 0.0) ? pos.xyz : pos3.xyz);
+ vec3 wpos1 = transform_point(model_mat, pos1.xyz);
+ vec3 wpos2 = transform_point(model_mat, pos2.xyz);
vec4 ndc_adj = point_world_to_ndc(wpos_adj);
vec4 ndc1 = point_world_to_ndc(wpos1);
@@ -104,7 +117,9 @@ void dots_vertex()
void fill_vertex()
{
- vec3 wpos = pos1.xyz;
+ mat4 model_mat = model_matrix_get();
+
+ vec3 wpos = transform_point(model_mat, pos1.xyz);
gl_Position = point_world_to_ndc(wpos);
gl_Position.z += 1e-2;
More information about the Bf-blender-cvs
mailing list