[Bf-blender-cvs] [e06882633aa] tmp-overlay-engine: Overlay Engine: Paint Modes
Clément Foucault
noreply at git.blender.org
Mon Nov 18 20:15:27 CET 2019
Commit: e06882633aa13cf5c510dff991ea2532abc81077
Author: Clément Foucault
Date: Sun Nov 17 02:27:39 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rBe06882633aa13cf5c510dff991ea2532abc81077
Overlay Engine: Paint Modes
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/overlay/overlay_edit_mesh.c
M source/blender/draw/engines/overlay/overlay_engine.c
A source/blender/draw/engines/overlay/overlay_paint.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/paint_face_vert.glsl
A source/blender/draw/engines/overlay/shaders/paint_point_vert.glsl
A source/blender/draw/engines/overlay/shaders/paint_texture_frag.glsl
A source/blender/draw/engines/overlay/shaders/paint_texture_vert.glsl
A source/blender/draw/engines/overlay/shaders/paint_vertcol_frag.glsl
A source/blender/draw/engines/overlay/shaders/paint_vertcol_vert.glsl
M source/blender/draw/engines/overlay/shaders/paint_weight_frag.glsl
M source/blender/draw/engines/overlay/shaders/paint_weight_vert.glsl
A source/blender/draw/engines/overlay/shaders/paint_wire_vert.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 13909c2a665..ea75c486a86 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -147,6 +147,7 @@ set(SRC
engines/overlay/overlay_metaball.c
engines/overlay/overlay_motion_path.c
engines/overlay/overlay_outline.c
+ engines/overlay/overlay_paint.c
engines/overlay/overlay_shader.c
engines/overlay/overlay_wireframe.c
@@ -325,16 +326,10 @@ data_to_c_simple(modes/shaders/object_particle_prim_vert.glsl SRC)
data_to_c_simple(modes/shaders/object_particle_dot_vert.glsl SRC)
data_to_c_simple(modes/shaders/object_particle_dot_frag.glsl SRC)
data_to_c_simple(modes/shaders/object_loose_points_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_texture_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_texture_vert.glsl SRC)
data_to_c_simple(modes/shaders/paint_vertex_frag.glsl SRC)
data_to_c_simple(modes/shaders/paint_vertex_vert.glsl SRC)
-data_to_c_simple(modes/shaders/paint_weight_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_weight_vert.glsl SRC)
data_to_c_simple(modes/shaders/paint_face_selection_vert.glsl SRC)
-data_to_c_simple(modes/shaders/paint_face_vert.glsl SRC)
data_to_c_simple(modes/shaders/paint_wire_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_wire_vert.glsl SRC)
data_to_c_simple(modes/shaders/paint_vert_frag.glsl SRC)
data_to_c_simple(modes/shaders/particle_strand_frag.glsl SRC)
data_to_c_simple(modes/shaders/particle_strand_vert.glsl SRC)
@@ -430,8 +425,15 @@ data_to_c_simple(engines/overlay/shaders/outline_prepass_geom.glsl SRC)
data_to_c_simple(engines/overlay/shaders/outline_prepass_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/outline_lightprobe_grid_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/outline_resolve_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_face_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_point_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_texture_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_texture_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_vertcol_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_vertcol_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/paint_weight_frag.glsl SRC)
data_to_c_simple(engines/overlay/shaders/paint_weight_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_wire_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/volume_velocity_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/wireframe_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/wireframe_geom.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index 6390ac42045..2d41993d77f 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -136,6 +136,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
sh = OVERLAY_shader_paint_weight();
pd->edit_mesh_weight_grp = grp = DRW_shgroup_create(sh, psl->edit_mesh_weight_ps);
DRW_shgroup_uniform_float_copy(grp, "opacity", 1.0);
+ DRW_shgroup_uniform_bool_copy(grp, "drawContours", false);
DRW_shgroup_uniform_texture(grp, "colorramp", G_draw.weight_ramp);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
}
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 61a08f9795c..abe0626eb5d 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -56,25 +56,19 @@ static void OVERLAY_engine_init(void *vedata)
break;
case CTX_MODE_EDIT_SURFACE:
case CTX_MODE_EDIT_CURVE:
- /* Nothing to do. */
- break;
case CTX_MODE_EDIT_TEXT:
- /* Nothing to do. */
- break;
case CTX_MODE_EDIT_ARMATURE:
- break;
case CTX_MODE_EDIT_METABALL:
- break;
case CTX_MODE_EDIT_LATTICE:
+ case CTX_MODE_PAINT_VERTEX:
+ case CTX_MODE_PAINT_TEXTURE:
+ case CTX_MODE_PAINT_WEIGHT:
+ case CTX_MODE_POSE:
+ /* Nothing to do. */
break;
case CTX_MODE_PARTICLE:
break;
- case CTX_MODE_POSE:
- case CTX_MODE_PAINT_WEIGHT:
- break;
case CTX_MODE_SCULPT:
- case CTX_MODE_PAINT_VERTEX:
- case CTX_MODE_PAINT_TEXTURE:
case CTX_MODE_OBJECT:
case CTX_MODE_PAINT_GPENCIL:
case CTX_MODE_EDIT_GPENCIL:
@@ -140,10 +134,11 @@ static void OVERLAY_cache_init(void *vedata)
break;
case CTX_MODE_POSE:
case CTX_MODE_PAINT_WEIGHT:
- break;
- case CTX_MODE_SCULPT:
case CTX_MODE_PAINT_VERTEX:
case CTX_MODE_PAINT_TEXTURE:
+ OVERLAY_paint_cache_init(vedata);
+ break;
+ case CTX_MODE_SCULPT:
case CTX_MODE_OBJECT:
case CTX_MODE_PAINT_GPENCIL:
case CTX_MODE_EDIT_GPENCIL:
@@ -259,16 +254,23 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
OVERLAY_motion_path_cache_populate(vedata, ob);
}
- // if (is_geom) {
- // if (paint_vertex_mode) {
- // OVERLAY_paint_vertex_cache_populate();
- // }
- // if (paint_texture_mode) {
- // OVERLAY_paint_texture_cache_populate();
- // }
- // if (scuplt_mode) {
- // OVERLAY_sculpt_cache_populate();
- // }
+ if (in_paint_mode) {
+ switch (draw_ctx->object_mode) {
+ case OB_MODE_VERTEX_PAINT:
+ OVERLAY_paint_vertex_cache_populate(vedata, ob);
+ break;
+ case OB_MODE_WEIGHT_PAINT:
+ OVERLAY_paint_weight_cache_populate(vedata, ob);
+ break;
+ case OB_MODE_TEXTURE_PAINT:
+ OVERLAY_paint_texture_cache_populate(vedata, ob);
+ break;
+ default:
+ break;
+ }
+ }
+ // if (scuplt_mode) {
+ // OVERLAY_sculpt_cache_populate();
// }
switch (ob->type) {
@@ -355,6 +357,12 @@ static void OVERLAY_draw_scene(void *vedata)
case CTX_MODE_EDIT_LATTICE:
OVERLAY_edit_lattice_draw(vedata);
break;
+ case CTX_MODE_POSE:
+ case CTX_MODE_PAINT_WEIGHT:
+ case CTX_MODE_PAINT_VERTEX:
+ case CTX_MODE_PAINT_TEXTURE:
+ OVERLAY_paint_draw(vedata);
+ break;
default:
break;
}
diff --git a/source/blender/draw/engines/overlay/overlay_paint.c b/source/blender/draw/engines/overlay/overlay_paint.c
new file mode 100644
index 00000000000..dae371728a9
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_paint.c
@@ -0,0 +1,209 @@
+/*
+ * 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 "DNA_mesh_types.h"
+
+#include "DEG_depsgraph_query.h"
+
+#include "overlay_private.h"
+
+void OVERLAY_paint_cache_init(OVERLAY_Data *vedata)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ OVERLAY_PassList *psl = vedata->psl;
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+ struct GPUShader *sh;
+ DRWShadingGroup *grp;
+ DRWState state;
+
+ const bool use_alpha_blending = (draw_ctx->v3d->shading.type == OB_WIRE);
+ const bool draw_contours = (pd->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0;
+ float opacity = 0.0f;
+
+ switch (pd->ctx_mode) {
+ case CTX_MODE_PAINT_WEIGHT: {
+ opacity = pd->overlay.weight_paint_mode_opacity;
+ if (opacity > 0.0f) {
+ state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+ state |= use_alpha_blending ? DRW_STATE_BLEND_ALPHA : DRW_STATE_BLEND_MUL;
+ DRW_PASS_CREATE(psl->paint_color_ps, state | pd->clipping_state);
+
+ sh = OVERLAY_shader_paint_weight();
+ pd->paint_surf_grp = grp = DRW_shgroup_create(sh, psl->paint_color_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_bool_copy(grp, "drawContours", draw_contours);
+ DRW_shgroup_uniform_bool_copy(grp, "useAlphaBlend", use_alpha_blending);
+ DRW_shgroup_uniform_float_copy(grp, "opacity", opacity);
+ DRW_shgroup_uniform_texture(grp, "colorramp", G_draw.weight_ramp);
+ }
+ break;
+ }
+ case CTX_MODE_PAINT_VERTEX: {
+ opacity = pd->overlay.vertex_paint_mode_opacity;
+ if (opacity > 0.0f) {
+ state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+ state |= use_alpha_blending ? DRW_STATE_BLEND_ALPHA : DRW_STATE_BLEND_MUL;
+ DRW_PASS_CREATE(psl->paint_color_ps, state | pd->clipping_state);
+
+ sh = OVERLAY_shader_paint_vertcol();
+ pd->paint_surf_grp = grp = DRW_shgroup_create(sh, psl->paint_color_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_bool_copy(grp, "useAlphaBlend", use_alpha_blending);
+ DRW_shgroup_uniform_float_copy(grp, "opacity", opacity);
+ }
+ break;
+ }
+ case CTX_MODE_PAINT_TEXTURE: {
+ const ImagePaintSettings *imapaint = &draw_ctx->scene->toolsettings->imapaint;
+ const bool mask_enabled = imapaint->flag & IMAGEPAINT_PROJECT_LAYER_STENCIL &&
+ imapaint->stencil != NULL;
+
+ opacity = mask_enabled ? pd->overlay.texture_paint_mode_opacity : 0.0f;
+ if (opacity > 0.0f) {
+ state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_ALPHA;
+ DRW_PASS_CREATE(psl->paint_color_ps, state | pd->clipping_state);
+
+ GPUTexture *tex = GPU_texture_from
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list