[Bf-blender-cvs] [44d3c80a740] greasepencil-object: WIP: Add UV rotation for Dot texture
Antonio Vazquez
noreply at git.blender.org
Tue Feb 20 17:02:18 CET 2018
Commit: 44d3c80a740f6c0a5ea4c18d01c0b43d96f511bb
Author: Antonio Vazquez
Date: Tue Feb 20 10:07:15 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB44d3c80a740f6c0a5ea4c18d01c0b43d96f511bb
WIP: Add UV rotation for Dot texture
Now the ramdom is fixed. Need parameters to adjust.
===================================================================
M source/blender/draw/engines/gpencil/gpencil_geom.c
M source/blender/draw/engines/gpencil/shaders/gpencil_point_geom.glsl
M source/blender/editors/gpencil/gpencil_paint.c
===================================================================
diff --git a/source/blender/draw/engines/gpencil/gpencil_geom.c b/source/blender/draw/engines/gpencil/gpencil_geom.c
index 433ab190813..4374aad75da 100644
--- a/source/blender/draw/engines/gpencil/gpencil_geom.c
+++ b/source/blender/draw/engines/gpencil/gpencil_geom.c
@@ -67,7 +67,7 @@ static void gpencil_set_stroke_point(
GWN_vertbuf_attr_set(vbo, color_id, idx, col);
/* transfer both values using the same shader variable */
- float uvdata[2] = { pt->uv_fac , pt->uv_rot };
+ float uvdata[2] = { pt->uv_fac, pt->uv_rot };
GWN_vertbuf_attr_set(vbo, uvdata_id, idx, uvdata);
/* the thickness of the stroke must be affected by zoom, so a pixel scale is calculated */
@@ -82,11 +82,12 @@ static void gpencil_set_stroke_point(
Gwn_Batch *DRW_gpencil_get_point_geom(bGPDstroke *gps, short thickness, const float ink[4])
{
static Gwn_VertFormat format = { 0 };
- static uint pos_id, color_id, size_id;
+ static uint pos_id, color_id, size_id, uvdata_id;
if (format.attrib_ct == 0) {
pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
color_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
size_id = GWN_vertformat_attr_add(&format, "thickness", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
}
Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
@@ -108,6 +109,11 @@ Gwn_Batch *DRW_gpencil_get_point_geom(bGPDstroke *gps, short thickness, const fl
GWN_vertbuf_attr_set(vbo, color_id, idx, col);
GWN_vertbuf_attr_set(vbo, size_id, idx, &thick);
+
+ /* transfer both values using the same shader variable */
+ float uvdata[2] = { pt->uv_fac, pt->uv_rot };
+ GWN_vertbuf_attr_set(vbo, uvdata_id, idx, uvdata);
+
GWN_vertbuf_attr_set(vbo, pos_id, idx, &pt->x);
++idx;
}
@@ -129,7 +135,7 @@ Gwn_Batch *DRW_gpencil_get_stroke_geom(bGPDframe *gpf, bGPDstroke *gps, short th
pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
color_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
thickness_id = GWN_vertformat_attr_add(&format, "thickness", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
- uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
}
Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
@@ -234,7 +240,7 @@ Gwn_Batch *DRW_gpencil_get_buffer_stroke_geom(bGPdata *gpd, float matrix[4][4],
pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
color_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
thickness_id = GWN_vertformat_attr_add(&format, "thickness", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
- uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
}
Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
@@ -307,7 +313,7 @@ Gwn_Batch *DRW_gpencil_get_buffer_point_geom(bGPdata *gpd, float matrix[4][4], s
pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
color_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
thickness_id = GWN_vertformat_attr_add(&format, "thickness", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
- uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ uvdata_id = GWN_vertformat_attr_add(&format, "uvdata", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
}
Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_point_geom.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_point_geom.glsl
index 6aff535d6ed..0abca0d31e7 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_point_geom.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_point_geom.glsl
@@ -38,6 +38,17 @@ float getZdepth(vec4 point)
/* in front by default */
return 0.0;
}
+
+vec2 rotateUV(vec2 uv, float angle)
+{
+ /* translate center of rotation to the center of texture */
+ vec2 new_uv = uv - vec2(0.5f, 0.5f);
+ vec2 rot_uv;
+ rot_uv.x = new_uv.x * cos(angle) - new_uv.y * sin(angle);
+ rot_uv.y = new_uv.y * cos(angle) + new_uv.x * sin(angle);
+ return rot_uv + vec2(0.5f, 0.5f);
+}
+
void main(void)
{
/* receive 4 points */
@@ -46,24 +57,23 @@ void main(void)
float size = finalThickness[0] * 0.5;
float aspect = 1.0;
-
/* generate the triangle strip */
- mTexCoord = vec2(0, 1);
+ mTexCoord = rotateUV(vec2(0, 1), finaluvdata[0].y);
mColor = finalColor[0];
gl_Position = vec4(vec2(sp0.x - size, sp0.y + size * aspect) / Viewport, getZdepth(P0), 1.0);
EmitVertex();
- mTexCoord = vec2(0, 0);
+ mTexCoord = rotateUV(vec2(0, 0), finaluvdata[0].y);
mColor = finalColor[0];
gl_Position = vec4(vec2(sp0.x - size, sp0.y - size * aspect) / Viewport, getZdepth(P0), 1.0);
EmitVertex();
- mTexCoord = vec2(1, 1);
+ mTexCoord = rotateUV(vec2(1, 1), finaluvdata[0].y);
mColor = finalColor[0];
gl_Position = vec4(vec2(sp0.x + size, sp0.y + size * aspect) / Viewport, getZdepth(P0), 1.0);
EmitVertex();
- mTexCoord = vec2(1, 0);
+ mTexCoord = rotateUV(vec2(1, 0), finaluvdata[0].y);
mColor = finalColor[0];
gl_Position = vec4(vec2(sp0.x + size, sp0.y - size * aspect) / Viewport, getZdepth(P0), 1.0);
EmitVertex();
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 29f45298718..1af8d9e2b17 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -577,6 +577,16 @@ static short gp_stroke_addpoint(
CLAMP(pt->pressure, GPENCIL_STRENGTH_MIN, 1.0f);
}
+ /* apply random to uv texture rotation */
+ if (BLI_frand() > 0.5f) {
+ pt->uv_rot = BLI_frand() * M_PI * -1;
+ }
+ else {
+ pt->uv_rot = BLI_frand() * M_PI_4;
+ }
+ CLAMP(pt->uv_rot, -M_PI_2, M_PI_2);
+
+
/* apply angle of stroke to brush size */
if (brush->draw_angle_factor > 0.0f) {
gp_brush_angle(gpd, brush, pt, mval);
@@ -685,6 +695,8 @@ static short gp_stroke_addpoint(
pts->time = pt->time;
pts->totweight = 0;
pts->weights = NULL;
+ pts->uv_fac = pt->uv_fac;
+ pts->uv_rot = pt->uv_rot;
/* force fill recalc */
gps->flag |= GP_STROKE_RECALC_CACHES;
@@ -991,6 +1003,8 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
pt->time = ptc->time;
pt->totweight = 0;
pt->weights = NULL;
+ pt->uv_fac = ptc->uv_fac;
+ pt->uv_rot = ptc->uv_rot;
}
/* subdivide and smooth the stroke */
More information about the Bf-blender-cvs
mailing list