OpenGL: convert legacy calls in transform.c
Took pieces from D2316 and D2359, changed a few more things. - use new immediate mode - use new matrix stack - remove state push/pop Part of T49043 and T49450
This commit is contained in:
@@ -64,9 +64,11 @@
|
||||
#include "BKE_mask.h"
|
||||
#include "BKE_report.h"
|
||||
|
||||
#include "BIF_gl.h"
|
||||
#include "BIF_glutil.h"
|
||||
|
||||
#include "GPU_immediate.h"
|
||||
#include "GPU_matrix.h"
|
||||
|
||||
#include "ED_image.h"
|
||||
#include "ED_keyframing.h"
|
||||
#include "ED_screen.h"
|
||||
@@ -1598,8 +1600,16 @@ typedef enum {
|
||||
LEFT,
|
||||
RIGHT
|
||||
} ArrowDirection;
|
||||
|
||||
#define POS_INDEX 0
|
||||
/* NOTE: this --^ is a bit hackish, but simplifies VertexFormat usage among functions
|
||||
* private to this file - merwin
|
||||
*/
|
||||
|
||||
static void drawArrow(ArrowDirection d, short offset, short length, short size)
|
||||
{
|
||||
immBegin(PRIM_LINES, 6);
|
||||
|
||||
switch (d) {
|
||||
case LEFT:
|
||||
offset = -offset;
|
||||
@@ -1607,14 +1617,12 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size)
|
||||
size = -size;
|
||||
/* fall-through */
|
||||
case RIGHT:
|
||||
glBegin(GL_LINES);
|
||||
glVertex2s(offset, 0);
|
||||
glVertex2s(offset + length, 0);
|
||||
glVertex2s(offset + length, 0);
|
||||
glVertex2s(offset + length - size, -size);
|
||||
glVertex2s(offset + length, 0);
|
||||
glVertex2s(offset + length - size, size);
|
||||
glEnd();
|
||||
immVertex2f(POS_INDEX, offset, 0);
|
||||
immVertex2f(POS_INDEX, offset + length, 0);
|
||||
immVertex2f(POS_INDEX, offset + length, 0);
|
||||
immVertex2f(POS_INDEX, offset + length - size, -size);
|
||||
immVertex2f(POS_INDEX, offset + length, 0);
|
||||
immVertex2f(POS_INDEX, offset + length - size, size);
|
||||
break;
|
||||
|
||||
case DOWN:
|
||||
@@ -1623,45 +1631,45 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size)
|
||||
size = -size;
|
||||
/* fall-through */
|
||||
case UP:
|
||||
glBegin(GL_LINES);
|
||||
glVertex2s(0, offset);
|
||||
glVertex2s(0, offset + length);
|
||||
glVertex2s(0, offset + length);
|
||||
glVertex2s(-size, offset + length - size);
|
||||
glVertex2s(0, offset + length);
|
||||
glVertex2s(size, offset + length - size);
|
||||
glEnd();
|
||||
immVertex2f(POS_INDEX, 0, offset);
|
||||
immVertex2f(POS_INDEX, 0, offset + length);
|
||||
immVertex2f(POS_INDEX, 0, offset + length);
|
||||
immVertex2f(POS_INDEX, -size, offset + length - size);
|
||||
immVertex2f(POS_INDEX, 0, offset + length);
|
||||
immVertex2f(POS_INDEX, size, offset + length - size);
|
||||
break;
|
||||
}
|
||||
|
||||
immEnd();
|
||||
}
|
||||
|
||||
static void drawArrowHead(ArrowDirection d, short size)
|
||||
{
|
||||
immBegin(PRIM_LINES, 4);
|
||||
|
||||
switch (d) {
|
||||
case LEFT:
|
||||
size = -size;
|
||||
/* fall-through */
|
||||
case RIGHT:
|
||||
glBegin(GL_LINES);
|
||||
glVertex2s(0, 0);
|
||||
glVertex2s(-size, -size);
|
||||
glVertex2s(0, 0);
|
||||
glVertex2s(-size, size);
|
||||
glEnd();
|
||||
immVertex2f(POS_INDEX, 0, 0);
|
||||
immVertex2f(POS_INDEX, -size, -size);
|
||||
immVertex2f(POS_INDEX, 0, 0);
|
||||
immVertex2f(POS_INDEX, -size, size);
|
||||
break;
|
||||
|
||||
case DOWN:
|
||||
size = -size;
|
||||
/* fall-through */
|
||||
case UP:
|
||||
glBegin(GL_LINES);
|
||||
glVertex2s(0, 0);
|
||||
glVertex2s(-size, -size);
|
||||
glVertex2s(0, 0);
|
||||
glVertex2s(size, -size);
|
||||
glEnd();
|
||||
immVertex2f(POS_INDEX, 0, 0);
|
||||
immVertex2f(POS_INDEX, -size, -size);
|
||||
immVertex2f(POS_INDEX, 0, 0);
|
||||
immVertex2f(POS_INDEX, size, -size);
|
||||
break;
|
||||
}
|
||||
|
||||
immEnd();
|
||||
}
|
||||
|
||||
static void drawArc(float size, float angle_start, float angle_end, int segments)
|
||||
@@ -1670,14 +1678,14 @@ static void drawArc(float size, float angle_start, float angle_end, int segments
|
||||
float angle;
|
||||
int a;
|
||||
|
||||
glBegin(GL_LINE_STRIP);
|
||||
immBegin(PRIM_LINE_STRIP, segments + 1);
|
||||
|
||||
for (angle = angle_start, a = 0; a < segments; angle += delta, a++) {
|
||||
glVertex2f(cosf(angle) * size, sinf(angle) * size);
|
||||
immVertex2f(POS_INDEX, cosf(angle) * size, sinf(angle) * size);
|
||||
}
|
||||
glVertex2f(cosf(angle_end) * size, sinf(angle_end) * size);
|
||||
immVertex2f(POS_INDEX, cosf(angle_end) * size, sinf(angle_end) * size);
|
||||
|
||||
glEnd();
|
||||
immEnd();
|
||||
}
|
||||
|
||||
static int helpline_poll(bContext *C)
|
||||
@@ -1695,10 +1703,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
|
||||
|
||||
if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) {
|
||||
float vecrot[3], cent[2];
|
||||
int mval[2];
|
||||
|
||||
mval[0] = x;
|
||||
mval[1] = y;
|
||||
float mval[3] = { x, y, 0.0f };
|
||||
|
||||
copy_v3_v3(vecrot, t->center);
|
||||
if (t->flag & T_EDIT) {
|
||||
@@ -1712,42 +1717,45 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
|
||||
|
||||
projectFloatViewEx(t, vecrot, cent, V3D_PROJ_TEST_CLIP_ZERO);
|
||||
|
||||
glPushMatrix();
|
||||
gpuMatrixBegin3D_legacy(); /* TODO(merwin): finish the 2D matrix API & use here */
|
||||
|
||||
unsigned pos = add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
|
||||
BLI_assert(pos == POS_INDEX);
|
||||
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
|
||||
|
||||
switch (t->helpline) {
|
||||
case HLP_SPRING:
|
||||
UI_ThemeColor(TH_VIEW_OVERLAY);
|
||||
|
||||
immUniformThemeColor(TH_VIEW_OVERLAY);
|
||||
setlinestyle(3);
|
||||
glLineWidth(1);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2iv(t->mval);
|
||||
glVertex2fv(cent);
|
||||
glEnd();
|
||||
glLineWidth(1.0f);
|
||||
|
||||
glTranslate2iv(mval);
|
||||
glRotatef(-RAD2DEGF(atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1])), 0, 0, 1);
|
||||
immBegin(PRIM_LINES, 2);
|
||||
immVertex2f(POS_INDEX, (float)t->mval[0], (float)t->mval[1]);
|
||||
immVertex2fv(POS_INDEX, cent);
|
||||
immEnd();
|
||||
|
||||
gpuTranslate3fv(mval);
|
||||
gpuRotateAxis(-RAD2DEGF(atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1])), 'Z');
|
||||
|
||||
setlinestyle(0);
|
||||
glLineWidth(3.0);
|
||||
glLineWidth(3.0f);
|
||||
drawArrow(UP, 5, 10, 5);
|
||||
drawArrow(DOWN, 5, 10, 5);
|
||||
break;
|
||||
case HLP_HARROW:
|
||||
UI_ThemeColor(TH_VIEW_OVERLAY);
|
||||
immUniformThemeColor(TH_VIEW_OVERLAY);
|
||||
gpuTranslate3fv(mval);
|
||||
|
||||
glTranslate2iv(mval);
|
||||
|
||||
glLineWidth(3.0);
|
||||
glLineWidth(3.0f);
|
||||
drawArrow(RIGHT, 5, 10, 5);
|
||||
drawArrow(LEFT, 5, 10, 5);
|
||||
break;
|
||||
case HLP_VARROW:
|
||||
UI_ThemeColor(TH_VIEW_OVERLAY);
|
||||
immUniformThemeColor(TH_VIEW_OVERLAY);
|
||||
|
||||
glTranslate2iv(mval);
|
||||
gpuTranslate3fv(mval);
|
||||
|
||||
glLineWidth(3.0);
|
||||
glLineWidth(3.0f);
|
||||
drawArrow(UP, 5, 10, 5);
|
||||
drawArrow(DOWN, 5, 10, 5);
|
||||
break;
|
||||
@@ -1758,33 +1766,35 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
|
||||
float dist = hypotf(dx, dy);
|
||||
float delta_angle = min_ff(15.0f / dist, (float)M_PI / 4.0f);
|
||||
float spacing_angle = min_ff(5.0f / dist, (float)M_PI / 12.0f);
|
||||
UI_ThemeColor(TH_VIEW_OVERLAY);
|
||||
|
||||
immUniformThemeColor(TH_VIEW_OVERLAY);
|
||||
|
||||
setlinestyle(3);
|
||||
glLineWidth(1);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2iv(t->mval);
|
||||
glVertex2fv(cent);
|
||||
glEnd();
|
||||
glLineWidth(1.0f);
|
||||
|
||||
glTranslatef(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0);
|
||||
immBegin(PRIM_LINES, 2);
|
||||
immVertex2f(POS_INDEX, (float)t->mval[0], (float)t->mval[1]);
|
||||
immVertex2fv(POS_INDEX, cent);
|
||||
immEnd();
|
||||
|
||||
gpuTranslate3f(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0);
|
||||
|
||||
setlinestyle(0);
|
||||
glLineWidth(3.0);
|
||||
glLineWidth(3.0f);
|
||||
drawArc(dist, angle - delta_angle, angle - spacing_angle, 10);
|
||||
drawArc(dist, angle + spacing_angle, angle + delta_angle, 10);
|
||||
|
||||
glPushMatrix();
|
||||
gpuPushMatrix();
|
||||
|
||||
glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0);
|
||||
glRotatef(RAD2DEGF(angle - delta_angle), 0, 0, 1);
|
||||
gpuTranslate3f(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0);
|
||||
gpuRotateAxis(RAD2DEGF(angle - delta_angle), 'Z');
|
||||
|
||||
drawArrowHead(DOWN, 5);
|
||||
|
||||
glPopMatrix();
|
||||
gpuPopMatrix();
|
||||
|
||||
glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0);
|
||||
glRotatef(RAD2DEGF(angle + delta_angle), 0, 0, 1);
|
||||
gpuTranslate3f(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0);
|
||||
gpuRotateAxis(RAD2DEGF(angle + delta_angle), 'Z');
|
||||
|
||||
drawArrowHead(UP, 5);
|
||||
break;
|
||||
@@ -1794,18 +1804,18 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
|
||||
unsigned char col[3], col2[3];
|
||||
UI_GetThemeColor3ubv(TH_GRID, col);
|
||||
|
||||
glTranslate2iv(mval);
|
||||
gpuTranslate3fv(mval);
|
||||
|
||||
glLineWidth(3.0);
|
||||
glLineWidth(3.0f);
|
||||
|
||||
UI_make_axis_color(col, col2, 'X');
|
||||
glColor3ubv((GLubyte *)col2);
|
||||
immUniformColor3ubv((GLubyte *)col2);
|
||||
|
||||
drawArrow(RIGHT, 5, 10, 5);
|
||||
drawArrow(LEFT, 5, 10, 5);
|
||||
|
||||
UI_make_axis_color(col, col2, 'Y');
|
||||
glColor3ubv((GLubyte *)col2);
|
||||
immUniformColor3ubv((GLubyte *)col2);
|
||||
|
||||
drawArrow(UP, 5, 10, 5);
|
||||
drawArrow(DOWN, 5, 10, 5);
|
||||
@@ -1813,7 +1823,8 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
|
||||
}
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
immUnbindProgram();
|
||||
gpuMatrixEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1821,7 +1832,7 @@ static void drawTransformView(const struct bContext *C, ARegion *UNUSED(ar), voi
|
||||
{
|
||||
TransInfo *t = arg;
|
||||
|
||||
glLineWidth(1.0);
|
||||
glLineWidth(1.0f);
|
||||
|
||||
drawConstraint(t);
|
||||
drawPropCircle(C, t);
|
||||
@@ -6831,10 +6842,13 @@ static void drawEdgeSlide(TransInfo *t)
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glPushAttrib(GL_CURRENT_BIT | GL_LINE_BIT | GL_POINT_BIT);
|
||||
glPushMatrix();
|
||||
gpuMatrixBegin3D_legacy();
|
||||
|
||||
glMultMatrixf(t->obedit->obmat);
|
||||
gpuMultMatrix3D(t->obedit->obmat);
|
||||
|
||||
unsigned pos = add_attrib(immVertexFormat(), "pos", COMP_F32, 3, KEEP_FLOAT);
|
||||
|
||||
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
|
||||
|
||||
if (sld->use_even == true) {
|
||||
float co_a[3], co_b[3], co_mark[3];
|
||||
@@ -6848,39 +6862,35 @@ static void drawEdgeSlide(TransInfo *t)
|
||||
add_v3_v3v3(co_b, curr_sv->v_co_orig, curr_sv->dir_side[1]);
|
||||
|
||||
glLineWidth(line_size);
|
||||
UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
|
||||
glBegin(GL_LINES);
|
||||
immUniformThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
|
||||
immBeginAtMost(PRIM_LINES, 4);
|
||||
if (curr_sv->v_side[0]) {
|
||||
glVertex3fv(curr_sv->v_side[0]->co);
|
||||
glVertex3fv(curr_sv->v_co_orig);
|
||||
immVertex3fv(pos, curr_sv->v_side[0]->co);
|
||||
immVertex3fv(pos, curr_sv->v_co_orig);
|
||||
}
|
||||
if (curr_sv->v_side[1]) {
|
||||
glVertex3fv(curr_sv->v_side[1]->co);
|
||||
glVertex3fv(curr_sv->v_co_orig);
|
||||
immVertex3fv(pos, curr_sv->v_side[1]->co);
|
||||
immVertex3fv(pos, curr_sv->v_co_orig);
|
||||
}
|
||||
glEnd();
|
||||
immEnd();
|
||||
|
||||
UI_ThemeColorShadeAlpha(TH_SELECT, -30, alpha_shade);
|
||||
immUniformThemeColorShadeAlpha(TH_SELECT, -30, alpha_shade);
|
||||
glPointSize(ctrl_size);
|
||||
glBegin(GL_POINTS);
|
||||
immBegin(PRIM_POINTS, 1);
|
||||
if (sld->flipped) {
|
||||
if (curr_sv->v_side[1]) glVertex3fv(curr_sv->v_side[1]->co);
|
||||
if (curr_sv->v_side[1]) immVertex3fv(pos, curr_sv->v_side[1]->co);
|
||||
}
|
||||
else {
|
||||
if (curr_sv->v_side[0]) glVertex3fv(curr_sv->v_side[0]->co);
|
||||
if (curr_sv->v_side[0]) immVertex3fv(pos, curr_sv->v_side[0]->co);
|
||||
}
|
||||
glEnd();
|
||||
immEnd();
|
||||
|
||||
UI_ThemeColorShadeAlpha(TH_SELECT, 255, alpha_shade);
|
||||
immUniformThemeColorShadeAlpha(TH_SELECT, 255, alpha_shade);
|
||||
glPointSize(guide_size);
|
||||
glBegin(GL_POINTS);
|
||||
#if 0
|
||||
interp_v3_v3v3(co_mark, co_b, co_a, fac);
|
||||
glVertex3fv(co_mark);
|
||||
#endif
|
||||
immBegin(PRIM_POINTS, 1);
|
||||
interp_line_v3_v3v3v3(co_mark, co_b, curr_sv->v_co_orig, co_a, fac);
|
||||
glVertex3fv(co_mark);
|
||||
glEnd();
|
||||
immVertex3fv(pos, co_mark);
|
||||
immEnd();
|
||||
}
|
||||
else {
|
||||
if (is_clamp == false) {
|
||||
@@ -6890,8 +6900,8 @@ static void drawEdgeSlide(TransInfo *t)
|
||||
const int alpha_shade = -160;
|
||||
|
||||
glLineWidth(line_size);
|
||||
UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
|
||||
glBegin(GL_LINES);
|
||||
immUniformThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
|
||||
immBegin(PRIM_LINES, sld->totsv * 2);
|
||||
|
||||
sv = sld->sv;
|
||||
for (i = 0; i < sld->totsv; i++, sv++) {
|
||||
@@ -6909,18 +6919,19 @@ static void drawEdgeSlide(TransInfo *t)
|
||||
add_v3_v3(a, sv->v_co_orig);
|
||||
add_v3_v3(b, sv->v_co_orig);
|
||||
|
||||
glVertex3fv(a);
|
||||
glVertex3fv(b);
|
||||
immVertex3fv(pos, a);
|
||||
immVertex3fv(pos, b);
|
||||
}
|
||||
glEnd();
|
||||
immEnd();
|
||||
}
|
||||
else {
|
||||
BLI_assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
glPopAttrib();
|
||||
immUnbindProgram();
|
||||
|
||||
gpuMatrixEnd();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
@@ -7444,19 +7455,23 @@ static void drawVertSlide(TransInfo *t)
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glPushAttrib(GL_CURRENT_BIT | GL_LINE_BIT | GL_POINT_BIT);
|
||||
glPushMatrix();
|
||||
gpuMatrixBegin3D_legacy();
|
||||
|
||||
glMultMatrixf(t->obedit->obmat);
|
||||
gpuMultMatrix3D(t->obedit->obmat);
|
||||
|
||||
glLineWidth(line_size);
|
||||
UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
|
||||
glBegin(GL_LINES);
|
||||
|
||||
unsigned pos = add_attrib(immVertexFormat(), "pos", COMP_F32, 3, KEEP_FLOAT);
|
||||
|
||||
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
|
||||
immUniformThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
|
||||
|
||||
immBegin(PRIM_LINES, sld->totsv * 2);
|
||||
if (is_clamp) {
|
||||
sv = sld->sv;
|
||||
for (i = 0; i < sld->totsv; i++, sv++) {
|
||||
glVertex3fv(sv->co_orig_3d);
|
||||
glVertex3fv(sv->co_link_orig_3d[sv->co_link_curr]);
|
||||
immVertex3fv(pos, sv->co_orig_3d);
|
||||
immVertex3fv(pos, sv->co_link_orig_3d[sv->co_link_curr]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -7469,19 +7484,19 @@ static void drawVertSlide(TransInfo *t)
|
||||
add_v3_v3(a, sv->co_orig_3d);
|
||||
add_v3_v3(b, sv->co_orig_3d);
|
||||
|
||||
glVertex3fv(a);
|
||||
glVertex3fv(b);
|
||||
immVertex3fv(pos, a);
|
||||
immVertex3fv(pos, b);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
immEnd();
|
||||
|
||||
glPointSize(ctrl_size);
|
||||
|
||||
glBegin(GL_POINTS);
|
||||
glVertex3fv((sld->flipped && sld->use_even) ?
|
||||
immBegin(PRIM_POINTS, 1);
|
||||
immVertex3fv(pos, (sld->flipped && sld->use_even) ?
|
||||
curr_sv->co_link_orig_3d[curr_sv->co_link_curr] :
|
||||
curr_sv->co_orig_3d);
|
||||
glEnd();
|
||||
immEnd();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
@@ -7507,19 +7522,20 @@ static void drawVertSlide(TransInfo *t)
|
||||
|
||||
add_v3_v3(co_dest_3d, curr_sv->co_orig_3d);
|
||||
|
||||
glLineWidth(1);
|
||||
glLineWidth(1.0f);
|
||||
setlinestyle(1);
|
||||
|
||||
cpack(0xffffff);
|
||||
glBegin(GL_LINES);
|
||||
glVertex3fv(curr_sv->co_orig_3d);
|
||||
glVertex3fv(co_dest_3d);
|
||||
imm_cpack(0xffffff);
|
||||
|
||||
glEnd();
|
||||
immBegin(PRIM_LINES, 2);
|
||||
immVertex3fv(pos, curr_sv->co_orig_3d);
|
||||
immVertex3fv(pos, co_dest_3d);
|
||||
immEnd();
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
glPopAttrib();
|
||||
immUnbindProgram();
|
||||
|
||||
gpuMatrixEnd();
|
||||
|
||||
if (v3d && v3d->zbuf)
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
Reference in New Issue
Block a user