Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-08-15 06:27:31 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-08-15 06:46:09 +0300
commitdfb890947d036bca735abcc56d55bd2572aefcb3 (patch)
tree01d971c3a8c9bc2014a42a115268ce712f7f6999 /source/blender/editors/manipulator_library
parent3ab46f42046854e1f4c036a9b779177136017772 (diff)
Manipulator: store initial-final matrix for reuse
Also take matrix_space into account when calculating final pixel size.
Diffstat (limited to 'source/blender/editors/manipulator_library')
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_intern.h4
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c17
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c19
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c14
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c11
5 files changed, 22 insertions, 43 deletions
diff --git a/source/blender/editors/manipulator_library/manipulator_library_intern.h b/source/blender/editors/manipulator_library/manipulator_library_intern.h
index 3a504ebe1d2..92ca195f21d 100644
--- a/source/blender/editors/manipulator_library/manipulator_library_intern.h
+++ b/source/blender/editors/manipulator_library/manipulator_library_intern.h
@@ -50,10 +50,10 @@ typedef struct ManipulatorCommonData {
typedef struct ManipulatorInteraction {
float init_value; /* initial property value */
- float init_matrix_basis[4][4];
float init_mval[2];
float init_offset;
- float init_scale_final;
+ float init_matrix_final[4][4];
+ float init_matrix_basis[4][4];
/* offset of last handling step */
float prev_offset;
diff --git a/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
index d8af351b4e3..1185bec2a2d 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
@@ -66,18 +66,12 @@ static void arrow2d_draw_geom(wmManipulator *mpr, const float matrix[4][4], cons
const float size_h = size / 2.0f;
const float arrow_length = RNA_float_get(mpr->ptr, "length");
const float arrow_angle = RNA_float_get(mpr->ptr, "angle");
- const float draw_line_ofs = (mpr->line_width * 0.5f) / mpr->scale_final;
uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
gpuPushMatrix();
gpuMultMatrix(matrix);
- gpuScaleUniform(mpr->scale_final);
gpuRotate2D(RAD2DEGF(arrow_angle));
- /* local offset */
- gpuTranslate2f(
- mpr->matrix_offset[3][0] + draw_line_ofs,
- mpr->matrix_offset[3][1]);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
@@ -103,18 +97,23 @@ static void manipulator_arrow2d_draw(const bContext *UNUSED(C), wmManipulator *m
{
float color[4];
+ float matrix_final[4][4];
+
manipulator_color_get(mpr, mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT, color);
glLineWidth(mpr->line_width);
+
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
glEnable(GL_BLEND);
- arrow2d_draw_geom(mpr, mpr->matrix_basis, color);
+ arrow2d_draw_geom(mpr, matrix_final, color);
glDisable(GL_BLEND);
if (mpr->interaction_data) {
ManipulatorInteraction *inter = mpr->interaction_data;
glEnable(GL_BLEND);
- arrow2d_draw_geom(mpr, inter->init_matrix_basis, (const float[4]){0.5f, 0.5f, 0.5f, 0.5f});
+ arrow2d_draw_geom(mpr, inter->init_matrix_final, (const float[4]){0.5f, 0.5f, 0.5f, 0.5f});
glDisable(GL_BLEND);
}
}
@@ -130,6 +129,8 @@ static void manipulator_arrow2d_invoke(
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
copy_m4_m4(inter->init_matrix_basis, mpr->matrix_basis);
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
+
mpr->interaction_data = inter;
}
diff --git a/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
index a7a454d62c3..970850dca06 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
@@ -79,7 +79,7 @@ typedef struct ArrowManipulator3D {
/* -------------------------------------------------------------------- */
-static void manipulator_arrow_matrix_world_get(wmManipulator *mpr, float r_matrix[4][4])
+static void manipulator_arrow_matrix_basis_get(wmManipulator *mpr, float r_matrix[4][4])
{
ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
@@ -188,7 +188,7 @@ static void arrow_draw_intern(ArrowManipulator3D *arrow, const bool select, cons
float matrix_final[4][4];
manipulator_color_get(mpr, highlight, color);
- manipulator_arrow_matrix_world_get(mpr, matrix_basis_adjust);
+ manipulator_arrow_matrix_basis_get(mpr, matrix_basis_adjust);
WM_manipulator_calc_matrix_final_params(
mpr, &((struct WM_ManipulatorMatrixParams) {
@@ -206,14 +206,8 @@ static void arrow_draw_intern(ArrowManipulator3D *arrow, const bool select, cons
if (mpr->interaction_data) {
ManipulatorInteraction *inter = mpr->interaction_data;
- WM_manipulator_calc_matrix_final_params(
- mpr, &((struct WM_ManipulatorMatrixParams) {
- .matrix_basis = inter->init_matrix_basis,
- .scale_final = &inter->init_scale_final,
- }), matrix_final);
-
gpuPushMatrix();
- gpuMultMatrix(matrix_final);
+ gpuMultMatrix(inter->init_matrix_final);
glEnable(GL_BLEND);
@@ -386,9 +380,8 @@ static void manipulator_arrow_invoke(
inter->init_mval[0] = event->mval[0];
inter->init_mval[1] = event->mval[1];
- inter->init_scale_final = mpr->scale_final;
-
- manipulator_arrow_matrix_world_get(mpr, inter->init_matrix_basis);
+ manipulator_arrow_matrix_basis_get(mpr, inter->init_matrix_basis);
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
mpr->interaction_data = inter;
}
@@ -467,7 +460,7 @@ static void MANIPULATOR_WT_arrow_3d(wmManipulatorType *wt)
/* api callbacks */
wt->draw = manipulator_arrow_draw;
wt->draw_select = manipulator_arrow_draw_select;
- wt->matrix_world_get = manipulator_arrow_matrix_world_get;
+ wt->matrix_basis_get = manipulator_arrow_matrix_basis_get;
wt->modal = manipulator_arrow_modal;
wt->setup = manipulator_arrow_setup;
wt->invoke = manipulator_arrow_invoke;
diff --git a/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
index 01376cf6184..d3843bbb6cb 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
@@ -73,8 +73,7 @@ typedef struct GrabInteraction {
/* only for when using properties */
float init_prop_co[3];
- float init_matrix_basis[4][4];
- float init_scale_final;
+ float init_matrix_final[4][4];
/* final output values, used for drawing */
struct {
@@ -184,14 +183,8 @@ static void grab3d_draw_intern(
if (mpr->interaction_data) {
GrabInteraction *inter = mpr->interaction_data;
- WM_manipulator_calc_matrix_final_params(
- mpr, &((struct WM_ManipulatorMatrixParams) {
- .matrix_basis = inter->init_matrix_basis,
- .scale_final = &inter->init_scale_final,
- }), matrix_final);
-
gpuPushMatrix();
- gpuMultMatrix(matrix_final);
+ gpuMultMatrix(inter->init_matrix_final);
if (align_view) {
gpuMultMatrix(matrix_align);
@@ -261,8 +254,7 @@ static void manipulator_grab_invoke(
inter->init_mval[0] = event->mval[0];
inter->init_mval[1] = event->mval[1];
- copy_m4_m4(inter->init_matrix_basis, mpr->matrix_basis);
- inter->init_scale_final = mpr->scale_final;
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
if (WM_manipulator_target_property_is_valid(mpr_prop)) {
diff --git a/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
index fc9b08b31cf..44878a24430 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
@@ -114,14 +114,8 @@ static void manipulator_primitive_draw_intern(
copy_v3_fl(color_outer, 0.5f);
color_outer[3] = 0.8f;
- WM_manipulator_calc_matrix_final_params(
- mpr, &((struct WM_ManipulatorMatrixParams) {
- .matrix_basis = inter->init_matrix_basis,
- .scale_final = &inter->init_scale_final,
- }), matrix_final);
-
gpuPushMatrix();
- gpuMultMatrix(matrix_final);
+ gpuMultMatrix(inter->init_matrix_final);
glEnable(GL_BLEND);
manipulator_primitive_draw_geom(color_inner, color_outer, draw_style);
@@ -156,8 +150,7 @@ static void manipulator_primitive_invoke(
{
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
- copy_m4_m4(inter->init_matrix_basis, mpr->matrix_basis);
- inter->init_scale_final = mpr->scale_final;
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
mpr->interaction_data = inter;
}