[Bf-blender-cvs] [632b00aeadb] tmp-overlay-engine: Overlay Engine: Armatures
Clément Foucault
noreply at git.blender.org
Fri Nov 15 01:35:26 CET 2019
Commit: 632b00aeadbeda605120872a3084a16e4efdcf5d
Author: Clément Foucault
Date: Tue Nov 12 02:36:24 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB632b00aeadbeda605120872a3084a16e4efdcf5d
Overlay Engine: Armatures
===================================================================
M source/blender/draw/CMakeLists.txt
A source/blender/draw/engines/overlay/overlay_armature.c
M source/blender/draw/engines/overlay/overlay_engine.c
M source/blender/draw/engines/overlay/overlay_extra.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/armature_dof_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_envelope_outline_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_envelope_solid_frag.glsl
A source/blender/draw/engines/overlay/shaders/armature_envelope_solid_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_shape_outline_geom.glsl
A source/blender/draw/engines/overlay/shaders/armature_shape_outline_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_shape_solid_frag.glsl
A source/blender/draw/engines/overlay/shaders/armature_shape_solid_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_sphere_outline_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_sphere_solid_frag.glsl
A source/blender/draw/engines/overlay/shaders/armature_sphere_solid_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_stick_frag.glsl
A source/blender/draw/engines/overlay/shaders/armature_stick_vert.glsl
A source/blender/draw/engines/overlay/shaders/armature_wire_vert.glsl
M source/blender/draw/engines/overlay/shaders/extra_vert.glsl
M source/blender/draw/intern/draw_manager.c
M source/blender/draw/modes/shaders/common_view_lib.glsl
M source/blender/draw/modes/shaders/object_color_axes_vert.glsl
M source/blender/draw/modes/shaders/object_empty_axes_vert.glsl
M source/blender/draw/modes/shaders/object_grid_frag.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 6d33d237123..0139d452baa 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -134,6 +134,7 @@ set(SRC
engines/gpencil/gpencil_shader_fx.c
engines/select/select_draw_utils.c
engines/select/select_engine.c
+ engines/overlay/overlay_armature.c
engines/overlay/overlay_engine.c
engines/overlay/overlay_edit_mesh.c
engines/overlay/overlay_extra.c
@@ -279,20 +280,7 @@ data_to_c_simple(modes/shaders/animviz_mpath_lines_vert.glsl SRC)
data_to_c_simple(modes/shaders/animviz_mpath_lines_geom.glsl SRC)
data_to_c_simple(modes/shaders/animviz_mpath_points_vert.glsl SRC)
data_to_c_simple(modes/shaders/armature_axes_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_sphere_solid_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_sphere_solid_frag.glsl SRC)
-data_to_c_simple(modes/shaders/armature_sphere_outline_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_envelope_solid_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_envelope_solid_frag.glsl SRC)
-data_to_c_simple(modes/shaders/armature_envelope_outline_vert.glsl SRC)
data_to_c_simple(modes/shaders/armature_envelope_distance_frag.glsl SRC)
-data_to_c_simple(modes/shaders/armature_shape_solid_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_shape_solid_frag.glsl SRC)
-data_to_c_simple(modes/shaders/armature_shape_outline_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_shape_outline_geom.glsl SRC)
-data_to_c_simple(modes/shaders/armature_stick_vert.glsl SRC)
-data_to_c_simple(modes/shaders/armature_stick_frag.glsl SRC)
-data_to_c_simple(modes/shaders/armature_dof_vert.glsl SRC)
data_to_c_simple(modes/shaders/edit_mesh_overlay_common_lib.glsl SRC)
data_to_c_simple(modes/shaders/edit_mesh_overlay_frag.glsl SRC)
data_to_c_simple(modes/shaders/edit_mesh_overlay_vert.glsl SRC)
@@ -382,6 +370,20 @@ data_to_c_simple(engines/gpencil/shaders/fx/gpencil_fx_wave_frag.glsl SRC)
data_to_c_simple(engines/select/shaders/selection_id_3D_vert.glsl SRC)
data_to_c_simple(engines/select/shaders/selection_id_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_dof_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_envelope_outline_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_envelope_solid_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_envelope_solid_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_shape_outline_geom.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_shape_outline_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_shape_solid_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_shape_solid_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_sphere_outline_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_sphere_solid_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_sphere_solid_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_stick_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_stick_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/armature_wire_vert.glsl SRC)
data_to_c_simple(engines/overlay/shaders/depth_only_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)
diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c
new file mode 100644
index 00000000000..eb6dc695415
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_armature.c
@@ -0,0 +1,2215 @@
+/*
+ * 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 <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "DNA_armature_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
+
+#include "DRW_render.h"
+
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_armature.h"
+
+#include "DEG_depsgraph_query.h"
+
+#include "ED_armature.h"
+#include "ED_view3d.h"
+
+#include "UI_resources.h"
+
+#include "draw_common.h"
+#include "draw_manager_text.h"
+
+#include "overlay_private.h"
+
+#define BONE_VAR(eBone, pchan, var) ((eBone) ? (eBone->var) : (pchan->var))
+#define BONE_FLAG(eBone, pchan) ((eBone) ? (eBone->flag) : (pchan->bone->flag))
+
+#define PT_DEFAULT_RAD 0.05f /* radius of the point batch. */
+
+typedef struct ArmatureDrawContext {
+ /* Current armature object */
+ Object *ob;
+ /* bArmature *arm; */ /* TODO */
+
+ union {
+ struct {
+ DRWCallBuffer *outline;
+ DRWCallBuffer *solid;
+ DRWCallBuffer *wire;
+ };
+ struct {
+ DRWCallBuffer *envelope_outline;
+ DRWCallBuffer *envelope_solid;
+ DRWCallBuffer *envelope_distance;
+ };
+ struct {
+ DRWCallBuffer *stick;
+ };
+ };
+
+ DRWCallBuffer *dof_lines;
+ DRWCallBuffer *dof_sphere;
+ DRWCallBuffer *point_solid;
+ DRWCallBuffer *point_outline;
+ DRWShadingGroup *custom_solid;
+ DRWShadingGroup *custom_outline;
+ DRWShadingGroup *custom_wire;
+
+ OVERLAY_ExtraCallBuffers *extras;
+
+ /**
+ * Follow `TH_*` naming except for mixed colors.
+ */
+ struct {
+ float select[4];
+ float edge_select[4];
+ float bone_select[4]; /* tint */
+ float wire[4];
+ float wire_edit[4];
+ float bone_solid[4];
+ float bone_active_unselect[4]; /* mix */
+ float bone_pose[4];
+ float bone_pose_active[4];
+ float bone_pose_active_unselect[4]; /* mix */
+ float text_hi[4];
+ float text[4];
+ float vertex_select[4];
+ float vertex[4];
+ } color;
+
+ /* not a theme, this is an override */
+ const float *const_color;
+ float const_wire;
+
+ bool do_relations;
+ bool transparent;
+ bool show_relations;
+
+ const ThemeWireColor *bcolor; /* pchan color */
+} ArmatureDrawContext;
+
+void OVERLAY_armature_cache_init(OVERLAY_Data *vedata)
+{
+ OVERLAY_PassList *psl = vedata->psl;
+ OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ pd->armature.transparent = (draw_ctx->v3d->shading.type == OB_WIRE) ||
+ XRAY_FLAG_ENABLED(draw_ctx->v3d);
+ pd->armature.show_relations = ((draw_ctx->v3d->flag & V3D_HIDE_HELPLINES) == 0);
+
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ADD;
+ DRW_PASS_CREATE(psl->armature_transp_ps, state | pd->clipping_state);
+
+ for (int i = 0; i < 2; i++) {
+ struct GPUShader *sh;
+ struct GPUVertFormat *format;
+ DRWShadingGroup *grp = NULL, *grp_sub = NULL;
+
+ OVERLAY_InstanceFormats *formats = OVERLAY_shader_instance_formats_get();
+ OVERLAY_ArmatureCallBuffers *cb = &pd->armature_call_buffers[i];
+ DRWPass **p_armature_ps = &psl->armature_ps[i];
+
+ state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_CULL_BACK |
+ (pd->armature.transparent ? DRW_STATE_BLEND_ALPHA : DRW_STATE_WRITE_DEPTH);
+ DRW_PASS_CREATE(*p_armature_ps, state | pd->clipping_state);
+
+ DRWPass *armature_ps = *p_armature_ps;
+
+#define BUF_INSTANCE DRW_shgroup_call_buffer_instance
+#define BUF_LINE(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_LINES)
+
+ {
+ format = formats->instance_bone;
+
+ sh = OVERLAY_shader_armature_sphere(false);
+ grp = DRW_shgroup_create(sh, armature_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ cb->point_solid = BUF_INSTANCE(grp, format, DRW_cache_bone_point_get());
+
+ sh = OVERLAY_shader_armature_sphere(true);
+ grp = DRW_shgroup_create(sh, armature_ps);
+ DRW_shgroup_state_disable(grp, DRW_STATE_CULL_BACK);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ cb->point_outline = BUF_INSTANCE(grp, format, DRW_cache_bone_point_wire_outline_get());
+
+ sh = OVERLAY_shader_armature_shape(false);
+ grp = DRW_shgroup_create(sh, armature_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_bool_copy(grp, "customShape", false);
+ cb->box_solid = BUF_INSTANCE(grp, format, DRW_cache_bone_box_get());
+ cb->octa_solid = BUF_INSTANCE(grp, format, DRW_cache_bone_octahedral_get());
+
+ cb->custom_solid = grp_sub = DRW_shgroup_create_sub(grp);
+ DRW_shgroup_uniform_bool_copy(grp_sub, "customShape", true);
+
+ sh = OVERLAY_shader_armature_shape(true);
+ grp = DRW_shgroup_create(sh, armature_ps);
+ DRW_shgroup_state_disable(grp, DRW_STATE_CULL_BACK);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_bool_copy(grp, "customShape", false);
+ cb->box_outline = BUF_INSTANCE(grp, format, DRW_cache_bone_box_wire_get());
+ cb->octa_outline = BUF_INSTANCE(grp, format, DRW_cache_bone_octahedral_wire_get());
+
+ cb->custom_outline = grp_sub = DRW_shgroup_create_sub(grp);
+ DRW_shgroup_state_disable(grp_sub, DRW_STATE_CULL_BACK);
+ DRW_shgroup_uniform_bool_copy(grp_sub, "customShape", true);
+ }
+ {
+ format = formats->instance_extra;
+
+ sh = OVERLAY_shader_armature_degrees_of_freedom();
+ grp = DRW_shgroup_create(sh, armature_ps);
+ DRW_shgroup_uniform_block(grp, "globalsBlock"
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list