[Bf-blender-cvs] [89b3a9c1479] tmp-overlay-engine: Overlay Engine: Lattice
Clément Foucault
noreply at git.blender.org
Mon Nov 18 20:15:25 CET 2019
Commit: 89b3a9c1479c920c1b4f92da44481bd14d31f606
Author: Clément Foucault
Date: Sat Nov 16 21:44:36 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB89b3a9c1479c920c1b4f92da44481bd14d31f606
Overlay Engine: Lattice
Cleanup: Port lattice wireframe coloring to shader
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/overlay/overlay_engine.c
M source/blender/draw/engines/overlay/overlay_extra.c
A source/blender/draw/engines/overlay/overlay_lattice.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/overlay_shader.c
A source/blender/draw/engines/overlay/shaders/edit_lattice_point_vert.glsl
A source/blender/draw/engines/overlay/shaders/edit_lattice_wire_vert.glsl
M source/blender/draw/engines/overlay/shaders/extra_wire_vert.glsl
M source/blender/draw/intern/draw_cache_impl_lattice.c
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 180588c4c06..13909c2a665 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -143,6 +143,7 @@ set(SRC
engines/overlay/overlay_facing.c
engines/overlay/overlay_grid.c
engines/overlay/overlay_image.c
+ engines/overlay/overlay_lattice.c
engines/overlay/overlay_metaball.c
engines/overlay/overlay_motion_path.c
engines/overlay/overlay_outline.c
@@ -394,6 +395,8 @@ data_to_c_simple(engines/overlay/shaders/edit_curve_handle_geom.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_handle_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_point_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_curve_wire_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/edit_lattice_point_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/edit_lattice_wire_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_mesh_common_lib.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_mesh_facefill_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/edit_mesh_facefill_vert.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 83ff341593a..61a08f9795c 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -134,6 +134,7 @@ static void OVERLAY_cache_init(void *vedata)
case CTX_MODE_EDIT_METABALL:
break;
case CTX_MODE_EDIT_LATTICE:
+ OVERLAY_edit_lattice_cache_init(vedata);
break;
case CTX_MODE_PARTICLE:
break;
@@ -239,6 +240,7 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
OVERLAY_edit_surf_cache_populate(vedata, ob);
break;
case OB_LATTICE:
+ OVERLAY_edit_lattice_cache_populate(vedata, ob);
break;
case OB_MBALL:
OVERLAY_edit_metaball_cache_populate(vedata, ob);
@@ -305,6 +307,9 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
case OB_LIGHTPROBE:
OVERLAY_lightprobe_cache_populate(vedata, ob);
break;
+ case OB_LATTICE:
+ OVERLAY_lattice_cache_populate(vedata, ob);
+ break;
}
}
@@ -347,6 +352,9 @@ static void OVERLAY_draw_scene(void *vedata)
case CTX_MODE_EDIT_TEXT:
OVERLAY_edit_text_draw(vedata);
break;
+ case CTX_MODE_EDIT_LATTICE:
+ OVERLAY_edit_lattice_draw(vedata);
+ break;
default:
break;
}
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 0ce7e3f8898..d73c22f28fe 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -189,7 +189,7 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
cb->groundline = BUF_INSTANCE(grp, format, DRW_cache_groundline_get());
}
{
- sh = OVERLAY_shader_extra_wire();
+ sh = OVERLAY_shader_extra_wire(false);
grp = DRW_shgroup_create(sh, extra_ps);
DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo);
@@ -197,6 +197,12 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
cb->extra_dashed_lines = BUF_LINE(grp, formats->wire_dashed_extra);
cb->extra_lines = BUF_LINE(grp, formats->wire_extra);
}
+ {
+ sh = OVERLAY_shader_extra_wire(true);
+
+ cb->extra_wire = grp = DRW_shgroup_create(sh, extra_ps);
+ DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo);
+ }
{
format = formats->pos;
sh = OVERLAY_shader_extra_point();
@@ -252,6 +258,20 @@ OVERLAY_ExtraCallBuffers *OVERLAY_extra_call_buffer_get(OVERLAY_Data *vedata, Ob
return &pd->extra_call_buffers[do_in_front];
}
+void OVERLAY_extra_wire(OVERLAY_ExtraCallBuffers *cb,
+ struct GPUBatch *geom,
+ const float mat[4][4],
+ const float color[4])
+{
+ float draw_mat[4][4];
+ copy_m4_m4(draw_mat, mat);
+ draw_mat[0][3] = color[0];
+ draw_mat[1][3] = color[1];
+ draw_mat[2][3] = color[2];
+ draw_mat[3][3] = color[3];
+ DRW_shgroup_call_obmat(cb->extra_wire, geom, draw_mat);
+}
+
/* -------------------------------------------------------------------- */
/** \name Empties
* \{ */
diff --git a/source/blender/draw/engines/overlay/overlay_lattice.c b/source/blender/draw/engines/overlay/overlay_lattice.c
new file mode 100644
index 00000000000..4e4081ee499
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_lattice.c
@@ -0,0 +1,78 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2019, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "overlay_private.h"
+
+void OVERLAY_edit_lattice_cache_init(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+ struct GPUShader *sh;
+ DRWShadingGroup *grp;
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL;
+ DRW_PASS_CREATE(psl->edit_lattice_ps, state | pd->clipping_state);
+
+ sh = OVERLAY_shader_edit_lattice_wire();
+ pd->edit_lattice_wires_grp = grp = DRW_shgroup_create(sh, psl->edit_lattice_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_texture(grp, "weightTex", G_draw.weight_ramp);
+
+ sh = OVERLAY_shader_edit_lattice_point();
+ pd->edit_lattice_points_grp = grp = DRW_shgroup_create(sh, psl->edit_lattice_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ }
+}
+
+void OVERLAY_edit_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob)
+{
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+ struct GPUBatch *geom;
+
+ geom = DRW_cache_lattice_wire_get(ob, true);
+ DRW_shgroup_call(pd->edit_lattice_wires_grp, geom, ob);
+
+ geom = DRW_cache_lattice_vert_overlay_get(ob);
+ DRW_shgroup_call(pd->edit_lattice_points_grp, geom, ob);
+}
+
+void OVERLAY_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob)
+{
+ OVERLAY_ExtraCallBuffers *cb = OVERLAY_extra_call_buffer_get(vedata, ob);
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ float *color;
+ DRW_object_wire_theme_get(ob, draw_ctx->view_layer, &color);
+
+ struct GPUBatch *geom = DRW_cache_lattice_wire_get(ob, false);
+ OVERLAY_extra_wire(cb, geom, ob->obmat, color);
+}
+
+void OVERLAY_edit_lattice_draw(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+
+ DRW_draw_pass(psl->edit_lattice_ps);
+}
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 7561a7cd962..bb613b4c93d 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -50,8 +50,7 @@ typedef struct OVERLAY_PassList {
DRWPass *armature_ps[2];
DRWPass *edit_curve_wire_ps[2];
DRWPass *edit_curve_handle_ps;
- DRWPass *edit_text_overlay_ps;
- DRWPass *edit_text_wire_ps[2];
+ DRWPass *edit_lattice_ps;
DRWPass *edit_mesh_depth_ps[2];
DRWPass *edit_mesh_verts_ps[2];
DRWPass *edit_mesh_edges_ps[2];
@@ -61,6 +60,8 @@ typedef struct OVERLAY_PassList {
DRWPass *edit_mesh_mix_occlude_ps;
DRWPass *edit_mesh_normals_ps;
DRWPass *edit_mesh_weight_ps;
+ DRWPass *edit_text_overlay_ps;
+ DRWPass *edit_text_wire_ps[2];
DRWPass *extra_ps[2];
DRWPass *extra_blend_ps;
DRWPass *extra_centers_ps;
@@ -155,6 +156,8 @@ typedef struct OVERLAY_ExtraCallBuffers {
DRWCallBuffer *probe_grid;
DRWCallBuffer *speaker;
+
+ DRWShadingGroup *extra_wire;
} OVERLAY_ExtraCallBuffers;
typedef struct OVERLAY_ArmatureCallBuffers {
@@ -187,8 +190,8 @@ typedef struct OVERLAY_PrivateData {
DRWShadingGroup *edit_curve_wire_grp[2];
DRWShadingGroup *edit_curve_handle_grp;
DRWShadingGroup *edit_curve_points_grp;
- DRWShadingGroup *edit_text_overlay_grp;
- DRWShadingGroup *edit_text_wire_grp[2];
+ DRWShadingGroup *edit_lattice_points_grp;
+ DRWShadingGroup *edit_lattice_wires_grp;
DRWShadingGroup *edit_mesh_depth_grp[2];
DRWShadingGroup *edit_mesh_faces_grp[2];
DRWShadingGroup *edit_mesh_faces_cage_grp[2];
@@ -201,6 +204,8 @@ typedef struct OVERLAY_PrivateData {
DRWShadingGroup *edit_mesh_lnormals_grp;
DRWShadingGroup *edit_mesh_analysis_grp;
DRWShadingGroup *edit_mesh_weight_grp;
+ DRWShadingGroup *edit_text_overlay_grp;
+ DRWShadingGroup *edit_text_wire_grp[2];
DRWShadingGroup *facing_grp;
DRWShadingGroup *wires_grp;
DRWShadingGroup *wires_xray_grp;
@@ -336,6 +341,11 @@ void OVERLAY_edit_curve_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_edit_surf_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_edit_curve_draw(OVERLAY_Data *vedata);
+void OVERLAY_edit_lattice_cache_init(OVERLAY_Data *vedata);
+void OVERLAY_edit_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob);
+void OVERLAY_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob);
+void OVERLAY_edit_lattice_draw(OVERLAY_Data *vedata);
+
void OVERLAY_edit_text_cache_init(OVERLAY_Data *vedata);
void OVERLAY_edit_text_cache_populate(OVERLAY_Data *vedata, Object *ob);
void OVERLAY_edit_text_draw(OVERLAY_Data *vedata);
@@ -370,6 +380,10 @@ void OVERLAY_empty_shape(OVERLAY_ExtraCallBuffers *cb,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list