[Bf-blender-cvs] [1c3f953565c] blender2.8: Armature: Put passes in a struct easier to pass around.
Clément Foucault
noreply at git.blender.org
Sun May 6 18:34:48 CEST 2018
Commit: 1c3f953565cefd7d59499e0ea99c3fea5890357f
Author: Clément Foucault
Date: Sun May 6 18:28:11 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB1c3f953565cefd7d59499e0ea99c3fea5890357f
Armature: Put passes in a struct easier to pass around.
===================================================================
M source/blender/draw/intern/draw_armature.c
M source/blender/draw/intern/draw_common.h
M source/blender/draw/modes/edit_armature_mode.c
M source/blender/draw/modes/object_mode.c
M source/blender/draw/modes/pose_mode.c
===================================================================
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index e4b9ddc7631..78b8482dad6 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -90,10 +90,7 @@ static struct {
DRWShadingGroup *bone_axes;
DRWShadingGroup *relationship_lines;
- DRWPass *pass_bone_solid;
- DRWPass *pass_bone_outline;
- DRWPass *pass_bone_wire;
- DRWPass *pass_bone_envelope;
+ DRWArmaturePasses passes;
} g_data = {NULL};
/* -------------------------------------------------------------------- */
@@ -108,11 +105,11 @@ static void drw_shgroup_bone_octahedral(
{
if (g_data.bone_octahedral_outline == NULL) {
struct Gwn_Batch *geom = DRW_cache_bone_octahedral_get();
- g_data.bone_octahedral_outline = shgroup_instance_bone_shape_outline(g_data.pass_bone_outline, geom);
+ g_data.bone_octahedral_outline = shgroup_instance_bone_shape_outline(g_data.passes.bone_outline, geom);
}
if (g_data.bone_octahedral_solid == NULL) {
struct Gwn_Batch *geom = DRW_cache_bone_octahedral_get();
- g_data.bone_octahedral_solid = shgroup_instance_bone_shape_solid(g_data.pass_bone_solid, geom);
+ g_data.bone_octahedral_solid = shgroup_instance_bone_shape_solid(g_data.passes.bone_solid, geom);
}
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
@@ -129,11 +126,11 @@ static void drw_shgroup_bone_box(
{
if (g_data.bone_box_wire == NULL) {
struct Gwn_Batch *geom = DRW_cache_bone_box_get();
- g_data.bone_box_outline = shgroup_instance_bone_shape_outline(g_data.pass_bone_outline, geom);
+ g_data.bone_box_outline = shgroup_instance_bone_shape_outline(g_data.passes.bone_outline, geom);
}
if (g_data.bone_box_solid == NULL) {
struct Gwn_Batch *geom = DRW_cache_bone_box_get();
- g_data.bone_box_solid = shgroup_instance_bone_shape_solid(g_data.pass_bone_solid, geom);
+ g_data.bone_box_solid = shgroup_instance_bone_shape_solid(g_data.passes.bone_solid, geom);
}
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
@@ -148,7 +145,7 @@ static void drw_shgroup_bone_wire_wire(const float (*bone_mat)[4], const float c
{
if (g_data.bone_wire_wire == NULL) {
struct Gwn_Batch *geom = DRW_cache_bone_wire_wire_outline_get();
- g_data.bone_wire_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ g_data.bone_wire_wire = shgroup_instance_wire(g_data.passes.bone_wire, geom);
}
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
@@ -160,10 +157,10 @@ static void drw_shgroup_bone_envelope_distance(
const float (*bone_mat)[4],
const float *radius_head, const float *radius_tail, const float *distance)
{
- if (g_data.pass_bone_envelope != NULL) {
+ if (g_data.passes.bone_envelope != NULL) {
if (g_data.bone_envelope_distance == NULL) {
- g_data.bone_envelope_distance = shgroup_instance_bone_envelope_distance(g_data.pass_bone_envelope);
- /* pass_bone_envelope should have the DRW_STATE_CULL_FRONT state enabled. */
+ g_data.bone_envelope_distance = shgroup_instance_bone_envelope_distance(g_data.passes.bone_envelope);
+ /* passes.bone_envelope should have the DRW_STATE_CULL_FRONT state enabled. */
}
float head_sphere[4] = {0.0f, 0.0f, 0.0f, 1.0f}, tail_sphere[4] = {0.0f, 1.0f, 0.0f, 1.0f};
float final_bonemat[4][4];
@@ -186,16 +183,16 @@ static void drw_shgroup_bone_envelope(
const float *radius_head, const float *radius_tail)
{
if (g_data.bone_point_wire == NULL) {
- g_data.bone_point_wire = shgroup_instance_bone_sphere_outline(g_data.pass_bone_wire);
+ g_data.bone_point_wire = shgroup_instance_bone_sphere_outline(g_data.passes.bone_wire);
}
if (g_data.bone_point_solid == NULL) {
- g_data.bone_point_solid = shgroup_instance_bone_sphere_solid(g_data.pass_bone_solid);
+ g_data.bone_point_solid = shgroup_instance_bone_sphere_solid(g_data.passes.bone_solid);
}
if (g_data.bone_envelope_wire == NULL) {
- g_data.bone_envelope_wire = shgroup_instance_bone_envelope_outline(g_data.pass_bone_wire);
+ g_data.bone_envelope_wire = shgroup_instance_bone_envelope_outline(g_data.passes.bone_wire);
}
if (g_data.bone_envelope_solid == NULL) {
- g_data.bone_envelope_solid = shgroup_instance_bone_envelope_solid(g_data.pass_bone_solid);
+ g_data.bone_envelope_solid = shgroup_instance_bone_envelope_solid(g_data.passes.bone_solid);
/* We can have a lot of overdraw if we don't do this. Also envelope are not subject to
* inverted matrix. */
DRW_shgroup_state_enable(g_data.bone_envelope_solid, DRW_STATE_CULL_BACK);
@@ -273,7 +270,7 @@ static void drw_shgroup_bone_custom_solid(const float (*bone_mat)[4], const floa
/* grr, not re-using instances! */
struct Gwn_Batch *geom = DRW_cache_object_surface_get(custom);
if (geom) {
- DRWShadingGroup *shgrp_geom_solid = shgroup_instance_solid(g_data.pass_bone_solid, geom);
+ DRWShadingGroup *shgrp_geom_solid = shgroup_instance_solid(g_data.passes.bone_solid, geom);
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
DRW_shgroup_call_dynamic_add(shgrp_geom_solid, final_bonemat, color);
@@ -285,7 +282,7 @@ static void drw_shgroup_bone_custom_wire(const float (*bone_mat)[4], const float
/* grr, not re-using instances! */
struct Gwn_Batch *geom = DRW_cache_object_wire_outline_get(custom);
if (geom) {
- DRWShadingGroup *shgrp_geom_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ DRWShadingGroup *shgrp_geom_wire = shgroup_instance_wire(g_data.passes.bone_wire, geom);
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
DRW_shgroup_call_dynamic_add(shgrp_geom_wire, final_bonemat, color);
@@ -298,10 +295,10 @@ static void drw_shgroup_bone_point(
const float bone_color[4], const float hint_color[4], const float outline_color[4])
{
if (g_data.bone_point_wire == NULL) {
- g_data.bone_point_wire = shgroup_instance_bone_sphere_outline(g_data.pass_bone_wire);
+ g_data.bone_point_wire = shgroup_instance_bone_sphere_outline(g_data.passes.bone_wire);
}
if (g_data.bone_point_solid == NULL) {
- g_data.bone_point_solid = shgroup_instance_bone_sphere_solid(g_data.pass_bone_solid);
+ g_data.bone_point_solid = shgroup_instance_bone_sphere_solid(g_data.passes.bone_solid);
}
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
@@ -315,7 +312,7 @@ static void drw_shgroup_bone_point(
static void drw_shgroup_bone_axes(const float (*bone_mat)[4], const float color[4])
{
if (g_data.bone_axes == NULL) {
- g_data.bone_axes = shgroup_instance_bone_axes(g_data.pass_bone_wire);
+ g_data.bone_axes = shgroup_instance_bone_axes(g_data.passes.bone_wire);
}
float final_bonemat[4][4];
mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
@@ -987,10 +984,11 @@ static void draw_bone_update_disp_matrix_custom(bPoseChannel *pchan)
static void draw_axes(EditBone *eBone, bPoseChannel *pchan)
{
+ float final_col[4];
const float *col = (g_theme.const_color) ? g_theme.const_color :
(BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? g_theme.text_hi_color : g_theme.text_color;
-
- drw_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), col);
+ copy_v4_v4(final_col, col);
+ drw_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), final_col);
}
static void draw_points(
@@ -1460,51 +1458,43 @@ static void draw_armature_pose(Object *ob, const float const_color[4])
*/
static void drw_shgroup_armature(
Object *ob,
- DRWPass *pass_bone_solid, DRWPass *pass_bone_outline,
- DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope,
+ DRWArmaturePasses passes,
DRWShadingGroup *shgrp_relationship_lines)
{
memset(&g_data, 0x0, sizeof(g_data));
g_data.ob = ob;
-
- g_data.pass_bone_solid = pass_bone_solid;
- g_data.pass_bone_outline = pass_bone_outline;
- g_data.pass_bone_wire = pass_bone_wire;
- g_data.pass_bone_envelope = pass_bone_envelope;
+ g_data.passes = passes;
g_data.relationship_lines = shgrp_relationship_lines;
-
memset(&g_color, 0x0, sizeof(g_color));
}
void DRW_shgroup_armature_object(
Object *ob, ViewLayer *view_layer,
- DRWPass *pass_bone_solid, DRWPass *pass_bone_outline,
- DRWPass *pass_bone_wire, DRWPass *UNUSED(pass_bone_envelope),
+ DRWArmaturePasses passes,
DRWShadingGroup *shgrp_relationship_lines)
{
float *color;
DRW_object_wire_theme_get(ob, view_layer, &color);
- drw_shgroup_armature(ob, pass_bone_solid, pass_bone_outline, pass_bone_wire, NULL, shgrp_relationship_lines);
+ passes.bone_envelope = NULL; /* Don't do envelope distance in object mode. */
+ drw_shgroup_armature(ob, passes, shgrp_relationship_lines);
draw_armature_pose(ob, color);
}
void DRW_shgroup_armature_pose(
Object *ob,
- DRWPass *pass_bone_solid, DRWPass *pass_bone_outline,
- DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope,
+ DRWArmaturePasses passes,
DRWShadingGroup *shgrp_relationship_lines)
{
- drw_shgroup_armature(ob, pass_bone_solid, pass_bone_outline, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines);
+ drw_shgroup_armature(ob, passes, shgrp_relationship_lines);
draw_armature_pose(ob, NULL);
}
void DRW_shgroup_armature_edit(
Object *ob,
- DRWPass *pass_bone_solid, DRWPass *pass_bone_outline,
- DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope,
+ DRWArmaturePasses passes,
DRWShadingGroup *shgrp_relationship_lines)
{
- drw_shgroup_armature(ob, pass_bone_solid, pass_bone_outline, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines);
+ drw_shgroup_armature(ob, passes, shgrp_relationship_lines);
draw_armature_edit(ob);
}
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index a81daa9949d..d53538f10d4 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -130,22 +130,26 @@ int DRW_object_wire_theme_get(
float *DRW_color_background_blend_get(int theme_id);
/* draw_armature.c */
+typedef struct DRWArmaturePasses{
+ struct DRWPass *bone_sol
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list