[Bf-blender-cvs] [20189aaa3d2] uvimage-editor-drawing: Remove batch from edit_uv drawing
Jeroen Bakker
noreply at git.blender.org
Mon Aug 24 10:40:39 CEST 2020
Commit: 20189aaa3d254af75271df595b4be0a2f2ebfd52
Author: Jeroen Bakker
Date: Mon Aug 24 10:40:22 2020 +0200
Branches: uvimage-editor-drawing
https://developer.blender.org/rB20189aaa3d254af75271df595b4be0a2f2ebfd52
Remove batch from edit_uv drawing
===================================================================
M source/blender/draw/engines/overlay/overlay_edit_uv.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl
M source/blender/draw/intern/draw_cache.c
M source/blender/draw/intern/draw_cache.h
===================================================================
diff --git a/source/blender/draw/engines/overlay/overlay_edit_uv.c b/source/blender/draw/engines/overlay/overlay_edit_uv.c
index 361ce66beb1..f39791aee82 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_uv.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_uv.c
@@ -65,62 +65,6 @@ static OVERLAY_UVLineStyle edit_uv_line_style_from_space_image(const SpaceImage
}
}
-static GPUBatch *edit_uv_tiled_border_gpu_batch_create(Image *image)
-{
- BLI_assert(image);
- BLI_assert(image->source == IMA_SRC_TILED);
-
- static GPUVertFormat format = {0};
- if (format.attr_len == 0) {
- GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- }
-
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
-
- const int32_t num_tiles = BLI_listbase_count(&image->tiles);
- const int32_t num_verts = num_tiles * 4;
- const int32_t num_lines = num_tiles * 4;
- const int32_t num_indexes = num_lines * 2;
-
- GPU_vertbuf_data_alloc(vbo, num_verts);
-
- float local_pos[3] = {0.0f, 0.0f, 0.0f};
- int vbo_index = 0;
-
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_LINES, num_indexes, num_verts);
-
- LISTBASE_FOREACH (ImageTile *, tile, &image->tiles) {
- const int min_x = ((tile->tile_number - 1001) % 10);
- const int min_y = ((tile->tile_number - 1001) / 10);
- const int max_x = min_x + 1;
- const int max_y = min_y + 1;
- local_pos[0] = min_x;
- local_pos[1] = min_y;
- GPU_vertbuf_vert_set(vbo, vbo_index, &local_pos);
- local_pos[0] = max_x;
- local_pos[1] = min_y;
- GPU_vertbuf_vert_set(vbo, vbo_index + 1, &local_pos);
- local_pos[0] = max_x;
- local_pos[1] = max_y;
- GPU_vertbuf_vert_set(vbo, vbo_index + 2, &local_pos);
- local_pos[0] = min_x;
- local_pos[1] = max_y;
- GPU_vertbuf_vert_set(vbo, vbo_index + 3, &local_pos);
-
- GPU_indexbuf_add_line_verts(&elb, vbo_index, vbo_index + 1);
- GPU_indexbuf_add_line_verts(&elb, vbo_index + 1, vbo_index + 2);
- GPU_indexbuf_add_line_verts(&elb, vbo_index + 2, vbo_index + 3);
- GPU_indexbuf_add_line_verts(&elb, vbo_index + 3, vbo_index);
-
- vbo_index += 4;
- }
-
- GPUBatch *batch = GPU_batch_create_ex(
- GPU_PRIM_LINES, vbo, GPU_indexbuf_build(&elb), GPU_BATCH_OWNS_VBO | GPU_BATCH_OWNS_INDEX);
- return batch;
-}
-
/* -------------------------------------------------------------------- */
/** \name Internal API
* \{ */
@@ -276,6 +220,9 @@ void OVERLAY_edit_uv_cache_init(OVERLAY_Data *vedata)
const DRWContextState *draw_ctx = DRW_context_state_get();
SpaceImage *sima = (SpaceImage *)draw_ctx->space_data;
Image *image = sima->image;
+ GPUBatch *geom = DRW_cache_quad_wires_get();
+ float obmat[4][4];
+ unit_m4(obmat);
DRW_PASS_CREATE(psl->edit_uv_tiled_image_borders_ps,
DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_ALWAYS);
@@ -291,17 +238,21 @@ void OVERLAY_edit_uv_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_vec4_copy(grp, "color", theme_color);
DRW_shgroup_uniform_vec3_copy(grp, "offset", (float[3]){0.0f, 0.0f, 0.0f});
- pd->edit_uv.draw_batch = edit_uv_tiled_border_gpu_batch_create(image);
- DRW_shgroup_call(grp, pd->edit_uv.draw_batch, NULL);
+ LISTBASE_FOREACH (ImageTile *, tile, &image->tiles) {
+ const int tile_x = ((tile->tile_number - 1001) % 10);
+ const int tile_y = ((tile->tile_number - 1001) / 10);
+ obmat[3][1] = (float)tile_y;
+ obmat[3][0] = (float)tile_x;
+ DRW_shgroup_call_obmat(grp, geom, obmat);
+ }
/* Active tile border */
ImageTile *active_tile = BLI_findlink(&image->tiles, image->active_tile_index);
- float offset[3] = {
- ((active_tile->tile_number - 1001) % 10), ((active_tile->tile_number - 1001) / 10), 0.0f};
+ obmat[3][0] = (float)((active_tile->tile_number - 1001) % 10);
+ obmat[3][1] = (float)((active_tile->tile_number - 1001) / 10);
grp = DRW_shgroup_create(sh, psl->edit_uv_tiled_image_borders_ps);
DRW_shgroup_uniform_vec4_copy(grp, "color", selected_color);
- DRW_shgroup_uniform_vec3_copy(grp, "offset", offset);
- DRW_shgroup_call(grp, DRW_cache_quad_image_wires_get(), NULL);
+ DRW_shgroup_call_obmat(grp, geom, obmat);
struct DRWTextStore *dt = DRW_text_cache_ensure();
uchar color[4];
@@ -405,14 +356,6 @@ static void edit_uv_stretching_update_ratios(OVERLAY_Data *vedata)
BLI_freelistN(&pd->edit_uv.totals);
}
-static void edit_uv_draw_finish(OVERLAY_Data *vedata)
-{
- OVERLAY_StorageList *stl = vedata->stl;
- OVERLAY_PrivateData *pd = stl->pd;
-
- GPU_BATCH_DISCARD_SAFE(pd->edit_uv.draw_batch);
-}
-
void OVERLAY_edit_uv_draw(OVERLAY_Data *vedata)
{
OVERLAY_PassList *psl = vedata->psl;
@@ -438,7 +381,6 @@ void OVERLAY_edit_uv_draw(OVERLAY_Data *vedata)
else if (pd->edit_uv.do_uv_shadow_overlay) {
DRW_draw_pass(psl->edit_uv_edges_ps);
}
- edit_uv_draw_finish(vedata);
}
/* \{ */
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 7e01ab8481b..499513841bc 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -351,7 +351,6 @@ typedef struct OVERLAY_PrivateData {
bool do_face_dots;
float uv_opacity;
- struct GPUBatch *draw_batch;
/* edge drawing */
OVERLAY_UVLineStyle line_style;
float dash_length;
diff --git a/source/blender/draw/engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl b/source/blender/draw/engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl
index 6adc06ed524..75a515a3b9a 100644
--- a/source/blender/draw/engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl
@@ -1,10 +1,12 @@
#pragma BLENDER_REQUIRE(common_view_lib.glsl)
-uniform vec3 offset;
in vec3 pos;
void main()
{
- vec4 position = point_object_to_ndc(pos + offset);
+ /* `pos` contains the coordinates of a quad (-1..1). but we need the coordinates of an image
+ * plane (0..1) */
+ vec3 image_pos = pos / 2.0 + 0.5;
+ vec4 position = point_object_to_ndc(image_pos);
gl_Position = position;
}
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 96aa970f76b..4d7440a3276 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -86,7 +86,6 @@ static struct DRWShapeCache {
GPUBatch *drw_cursor_only_circle;
GPUBatch *drw_fullscreen_quad;
GPUBatch *drw_quad;
- GPUBatch *drw_quad_image_wires;
GPUBatch *drw_quad_wires;
GPUBatch *drw_grid;
GPUBatch *drw_sphere;
@@ -399,28 +398,6 @@ GPUBatch *DRW_cache_quad_get(void)
return SHC.drw_quad;
}
-GPUBatch *DRW_cache_quad_image_wires_get(void)
-{
- if (!SHC.drw_quad_image_wires) {
- GPUVertFormat format = extra_vert_format();
-
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
- GPU_vertbuf_data_alloc(vbo, 5);
-
- int v = 0;
- int flag = VCLASS_EMPTY_SCALED;
- float p[4][2] = {{0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f}};
- for (int a = 0; a < 5; a++) {
- int i = a % 4;
- GPU_vertbuf_vert_set(vbo, v++, &(Vert){{p[i][0], p[i][1], 0.0f}, flag});
- }
-
- SHC.drw_quad_image_wires = GPU_batch_create_ex(
- GPU_PRIM_LINE_STRIP, vbo, NULL, GPU_BATCH_OWNS_VBO);
- }
- return SHC.drw_quad_image_wires;
-}
-
/* Just a regular quad with 4 vertices - wires. */
GPUBatch *DRW_cache_quad_wires_get(void)
{
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index 4b631ce6391..7164a477d8a 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -42,7 +42,6 @@ struct GPUBatch *DRW_cache_groundline_get(void);
struct GPUBatch *DRW_cache_grid_get(void);
struct GPUBatch *DRW_cache_fullscreen_quad_get(void);
struct GPUBatch *DRW_cache_quad_get(void);
-struct GPUBatch *DRW_cache_quad_image_wires_get(void);
struct GPUBatch *DRW_cache_quad_wires_get(void);
struct GPUBatch *DRW_cache_cube_get(void);
struct GPUBatch *DRW_cache_sphere_get(void);
More information about the Bf-blender-cvs
mailing list