OpenGL: convert to new matrix API (part 4)

Part of T49450, fixes a Push/Pop mismatch from part yesterday's 3.
This commit is contained in:
Mike Erwin 2017-03-21 16:08:14 -04:00
parent 7870bde275
commit 3bd831d1d6
13 changed files with 100 additions and 98 deletions

View File

@ -58,13 +58,12 @@
#include "RNA_access.h"
#include "BIF_gl.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
/* *************************************************** */
/* CURRENT FRAME DRAWING */
@ -81,8 +80,9 @@ static void draw_cfra_number(Scene *scene, View2D *v2d, const float cfra, const
int slen;
/* because the frame number text is subject to the same scaling as the contents of the view */
gpuPushMatrix();
UI_view2d_scale_get(v2d, &xscale, &yscale);
glScalef(1.0f / xscale, 1.0f, 1.0f);
gpuScale2f(1.0f / xscale, 1.0f);
/* get timecode string
* - padding on str-buf passed so that it doesn't sit on the frame indicator
@ -115,7 +115,7 @@ static void draw_cfra_number(Scene *scene, View2D *v2d, const float cfra, const
UI_fontstyle_draw_simple(fstyle, x - 0.25f * U.widget_unit, y + 0.15f * U.widget_unit, numstr, col);
/* restore view transform */
glScalef(xscale, 1.0, 1.0);
gpuPopMatrix();
}
/* General call for drawing current frame indicator in animation editor */

View File

@ -56,10 +56,10 @@
#include "WM_api.h"
#include "WM_types.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
@ -464,7 +464,8 @@ void ED_markers_draw(const bContext *C, int flag)
/* no time correction for framelen! space is drawn with old values */
ypixels = BLI_rcti_size_y(&v2d->mask);
UI_view2d_scale_get(v2d, &xscale, &yscale);
glScalef(1.0f / xscale, 1.0f, 1.0f);
gpuPushMatrix();
gpuScale2f(1.0f / xscale, 1.0f);
/* x-bounds with offset for text (adjust for long string, avoid checking string width) */
font_width_max = (10 * UI_DPI_FAC) / xscale;
@ -487,7 +488,7 @@ void ED_markers_draw(const bContext *C, int flag)
}
}
glScalef(xscale, 1.0f, 1.0f);
gpuPopMatrix();
}
/* ************************ Marker Wrappers API ********************* */

View File

@ -56,7 +56,7 @@
#include "BKE_screen.h"
#include "BKE_idprop.h"
#include "BIF_gl.h"
#include "GPU_matrix.h"
#include "BLF_api.h"
#include "BLT_translation.h"
@ -1378,10 +1378,10 @@ void UI_block_draw(const bContext *C, uiBlock *block)
/* pixel space for AA widgets */
glMatrixMode(GL_PROJECTION);
glPushMatrix();
gpuPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
gpuPushMatrix();
gpuLoadIdentity();
wmOrtho2_region_pixelspace(ar);
@ -1407,9 +1407,9 @@ void UI_block_draw(const bContext *C, uiBlock *block)
/* restore matrix */
glMatrixMode(GL_PROJECTION);
glPopMatrix();
gpuPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
gpuPopMatrix();
if (multisample_enabled)
glEnable(GL_MULTISAMPLE);

View File

@ -55,6 +55,7 @@
#include "GPU_immediate.h"
#include "GPU_draw.h"
#include "GPU_shader.h"
#include "GPU_matrix.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@ -762,17 +763,17 @@ void ED_mask_draw_region(Mask *mask, ARegion *ar,
glBlendFunc(GL_DST_COLOR, GL_ZERO);
}
glPushMatrix();
glTranslatef(x, y, 0);
glScalef(zoomx, zoomy, 0);
gpuPushMatrix();
gpuTranslate2f(x, y);
gpuScale2f(zoomx, zoomy);
if (stabmat) {
glMultMatrixf((const float *) stabmat);
gpuMultMatrix3D(stabmat); /* XXX make this a 2D matrix */
}
GPUShader *shader = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "shuffle"), 4, 1, red);
immDrawPixelsTex(0.0f, 0.0f, width, height, GL_RED, GL_FLOAT, GL_NEAREST, buffer, 1.0f, 1.0f, NULL);
glPopMatrix();
gpuPopMatrix();
if (overlay_mode != MASK_OVERLAY_ALPHACHANNEL) {
glDisable(GL_BLEND);
@ -782,14 +783,14 @@ void ED_mask_draw_region(Mask *mask, ARegion *ar,
}
/* apply transformation so mask editing tools will assume drawing from the origin in normalized space */
glPushMatrix();
gpuPushMatrix();
if (stabmat) {
glMultMatrixf((const float *) stabmat);
gpuMultMatrix3D(stabmat); /* XXX make this a 2D matrix */
}
glTranslatef(x + xofs, y + yofs, 0);
glScalef(maxdim * zoomx, maxdim * zoomy, 0);
gpuTranslate2f(x + xofs, y + yofs);
gpuScale2f(maxdim * zoomx, maxdim * zoomy);
if (do_draw_cb) {
ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
@ -802,7 +803,7 @@ void ED_mask_draw_region(Mask *mask, ARegion *ar,
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
}
glPopMatrix();
gpuPopMatrix();
}
void ED_mask_draw_frames(Mask *mask, ARegion *ar, const int cfra, const int sfra, const int efra)

View File

@ -71,9 +71,9 @@
#include "RNA_access.h"
#include "RNA_define.h"
#include "GPU_glew.h"
#include "GPU_compositing.h"
#include "GPU_framebuffer.h"
#include "GPU_matrix.h"
#include "render_intern.h"
@ -335,7 +335,7 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
wmOrtho2(0, sizex, 0, sizey);
glTranslatef(sizex / 2, sizey / 2, 0.0f);
gpuTranslate2f(sizex / 2, sizey / 2);
G.f |= G_RENDER_OGL;
ED_gpencil_draw_ex(scene, gpd, sizex, sizey, scene->r.cfra, SPACE_SEQ);

View File

@ -50,6 +50,7 @@
#include "GPU_basic_shader.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "UI_interface.h"
@ -568,12 +569,12 @@ void glaDefine2DArea(rcti *screen_rect)
*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gpuLoadIdentity();
glOrtho(0.0, sc_w, 0.0, sc_h, -1, 1);
glTranslatef(GLA_PIXEL_OFS, GLA_PIXEL_OFS, 0.0);
gpuTranslate2f(GLA_PIXEL_OFS, GLA_PIXEL_OFS);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gpuLoadIdentity();
}
/* TODO(merwin): put the following 2D code to use, or build new 2D code inspired & informd by it */
@ -684,9 +685,9 @@ void glaEnd2DDraw(gla2DDrawInfo *di)
glViewport(di->orig_vp[0], di->orig_vp[1], di->orig_vp[2], di->orig_vp[3]);
glScissor(di->orig_vp[0], di->orig_vp[1], di->orig_vp[2], di->orig_vp[3]);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(di->orig_projmat);
gpuLoadMatrix3D(di->orig_projmat);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(di->orig_viewmat);
gpuLoadMatrix3D(di->orig_viewmat);
MEM_freeN(di);
}
@ -743,14 +744,14 @@ void bglPolygonOffset(float viewdist, float dist)
winmat[14] -= offs;
offset += offs;
glLoadMatrixf(winmat);
gpuLoadMatrix3D(winmat);
glMatrixMode(GL_MODELVIEW);
}
else {
glMatrixMode(GL_PROJECTION);
winmat[14] += offset;
offset = 0.0;
glLoadMatrixf(winmat);
gpuLoadMatrix3D(winmat);
glMatrixMode(GL_MODELVIEW);
}
}

View File

@ -26,6 +26,7 @@
#include "GPU_framebuffer.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
@ -463,7 +464,7 @@ static void screen_preview_draw(const bScreen *screen, int size_x, int size_y)
wmOrtho2(0.0f, size_x, 0.0f, size_y);
/* center */
glTranslatef(size_x * (1.0f - asp[0]) * 0.5f, size_y * (1.0f - asp[1]) * 0.5f, 0.0f);
gpuTranslate2f(size_x * (1.0f - asp[0]) * 0.5f, size_y * (1.0f - asp[1]) * 0.5f);
screen_preview_scale_get(screen, size_x, size_y, asp, scale);
screen_preview_draw_areas(screen, scale, col, 1.5f);

View File

@ -44,6 +44,7 @@
#include "BKE_depsgraph.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
@ -263,13 +264,13 @@ void clip_draw_cfra(SpaceClip *sc, ARegion *ar, Scene *scene)
/* because the frame number text is subject to the same scaling as the contents of the view */
float xscale, yscale;
UI_view2d_scale_get(v2d, &xscale, &yscale);
glPushMatrix();
glScalef(1.0f / xscale, 1.0f, 1.0f);
gpuPushMatrix();
gpuScale2f(1.0f / xscale, 1.0f);
ED_region_cache_draw_curfra_label(sc->user.framenr, (float)sc->user.framenr * xscale, 18);
/* restore view transform */
glPopMatrix();
gpuPopMatrix();
}
void clip_draw_sfra_efra(View2D *v2d, Scene *scene)

View File

@ -60,7 +60,7 @@
#include "IMB_imbuf.h"
#include "BIF_gl.h"
#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
@ -1213,13 +1213,13 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar)
show_cursor |= sc->around == V3D_AROUND_CURSOR;
if (show_cursor) {
glPushMatrix();
glTranslatef(x, y, 0);
glScalef(zoomx, zoomy, 0);
glMultMatrixf(sc->stabmat);
glScalef(width, height, 0);
gpuPushMatrix();
gpuTranslate2f(x, y);
gpuScale2f(zoomx, zoomy);
gpuMultMatrix3D(sc->stabmat); /* XXX make this a 2D matrix */
gpuScale2f(width, height);
ED_image_draw_cursor(ar, sc->cursor);
glPopMatrix();
gpuPopMatrix();
}
clip_draw_cache_and_notes(C, sc, ar);

View File

@ -63,6 +63,7 @@
#include "BIF_glutil.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "BLF_api.h"
@ -114,15 +115,14 @@ static void draw_render_info(const bContext *C,
int x, y;
UI_view2d_view_to_region(&ar->v2d, 0.0f, 0.0f, &x, &y);
glPushMatrix();
glTranslatef(x, y, 0.0f);
glScalef(zoomx, zoomy, 1.0f);
gpuPushMatrix();
gpuTranslate2f(x, y);
gpuScale2f(zoomx, zoomy);
if (rd->mode & R_BORDER) {
/* TODO: round or floor instead of casting to int */
glTranslatef((int)(-rd->border.xmin * rd->xsch * rd->size * 0.01f),
(int)(-rd->border.ymin * rd->ysch * rd->size * 0.01f),
0.0f);
gpuTranslate2f((int)(-rd->border.xmin * rd->xsch * rd->size * 0.01f),
(int)(-rd->border.ymin * rd->ysch * rd->size * 0.01f));
}
unsigned int pos = add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
@ -142,7 +142,7 @@ static void draw_render_info(const bContext *C,
MEM_freeN(tiles);
}
glPopMatrix();
gpuPopMatrix();
}
}
}

View File

@ -55,8 +55,6 @@
#include "BKE_nla.h"
#include "BKE_curve.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "ED_armature.h"
@ -405,7 +403,7 @@ static void drawsolidcube_size(float xsize, float ysize, float zsize)
Batch_init(&batch, GL_TRIANGLES, &vbo, NULL);
}
gpuMatrixBegin3D_legacy();
gpuMatrixBegin3D_legacy(); /* TODO: replace Begin/End with Push/Pop */
gpuScale3f(xsize, ysize, zsize);
if (flat_color) {
@ -452,7 +450,7 @@ static void drawcube_size(float xsize, float ysize, float zsize)
Batch_set_builtin_program(&batch, GPU_SHADER_3D_UNIFORM_COLOR);
}
gpuMatrixBegin3D_legacy();
gpuMatrixBegin3D_legacy(); /* TODO: replace Begin/End with Push/Pop */
gpuScale3f(xsize, ysize, zsize);
Batch_use_program(&batch);
@ -718,13 +716,13 @@ static void draw_bone_points(const short dt, int armflag, unsigned int boneflag,
}
}
glTranslatef(0.0f, 1.0f, 0.0f);
gpuPushMatrix();
gpuTranslate2f(0.0f, 1.0f);
if (dt > OB_WIRE)
draw_bonevert_solid();
else
draw_bonevert();
glTranslatef(0.0f, -1.0f, 0.0f);
gpuPopMatrix();
}
/* 16 values of sin function (still same result!) */
@ -1374,18 +1372,16 @@ static void draw_b_bone_boxes(const short dt, bPoseChannel *pchan, EditBone *ebo
}
for (a = 0; a < segments; a++) {
glPushMatrix();
glMultMatrixf(bbone[a].mat);
gpuPushMatrix();
gpuMultMatrix3D(bbone[a].mat);
if (dt == OB_SOLID) drawsolidcube_size(xwidth, dlen, zwidth);
else drawcube_size(xwidth, dlen, zwidth);
glPopMatrix();
gpuPopMatrix();
}
}
else {
glPushMatrix();
if (dt == OB_SOLID) drawsolidcube_size(xwidth, length, zwidth);
else drawcube_size(xwidth, length, zwidth);
glPopMatrix();
}
}
@ -1408,10 +1404,10 @@ static void draw_b_bone(const short dt, int armflag, int boneflag, short constfl
/* draw points only if... */
if (armflag & ARM_EDITMODE) {
/* move to unitspace */
glPushMatrix();
glScalef(length, length, length);
gpuPushMatrix();
gpuScaleUniform(length);
draw_bone_points(dt, armflag, boneflag, id);
glPopMatrix();
gpuPopMatrix();
length *= 0.95f; /* make vertices visible */
}
@ -1535,11 +1531,11 @@ static void draw_wire_bone(const short dt, int armflag, int boneflag, short cons
/* draw points only if... */
if (armflag & ARM_EDITMODE) {
/* move to unitspace */
glPushMatrix();
glScalef(length, length, length);
gpuPushMatrix();
gpuScaleUniform(length);
flat_color = true;
draw_bone_points(dt, armflag, boneflag, id);
glPopMatrix();
gpuPopMatrix();
length *= 0.95f; /* make vertices visible */
}
@ -1571,7 +1567,7 @@ static void draw_bone(const short dt, int armflag, int boneflag, short constflag
{
/* Draw a 3d octahedral bone, we use normalized space based on length */
glScalef(length, length, length);
gpuScaleUniform(length);
/* set up solid drawing */
if (dt > OB_WIRE) {
@ -1636,7 +1632,7 @@ static void draw_custom_bone(Scene *scene, SceneLayer *sl, View3D *v3d, RegionVi
{
if (ob == NULL) return;
glScalef(length, length, length);
gpuScaleUniform(length);
/* colors for posemode */
if (armflag & ARM_POSEMODE) {
@ -2030,13 +2026,13 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
{
if (bone->layer & arm->layer) {
const bool use_custom = (pchan->custom) && !(arm->flag & ARM_NO_CUSTOM);
glPushMatrix();
gpuPushMatrix();
if (use_custom && pchan->custom_tx) {
glMultMatrixf(pchan->custom_tx->pose_mat);
gpuMultMatrix3D(pchan->custom_tx->pose_mat);
}
else {
glMultMatrixf(pchan->pose_mat);
gpuMultMatrix3D(pchan->pose_mat);
}
/* catch exception for bone with hidden parent */
@ -2098,7 +2094,7 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
}
}
glPopMatrix();
gpuPopMatrix();
}
}
@ -2134,13 +2130,13 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
if (bone->layer & arm->layer) {
if (pchan->custom) {
if ((dt < OB_SOLID) || (bone->flag & BONE_DRAWWIRE)) {
glPushMatrix();
gpuPushMatrix();
if (pchan->custom_tx) {
glMultMatrixf(pchan->custom_tx->pose_mat);
gpuMultMatrix3D(pchan->custom_tx->pose_mat);
}
else {
glMultMatrixf(pchan->pose_mat);
gpuMultMatrix3D(pchan->pose_mat);
}
/* prepare colors */
@ -2165,7 +2161,7 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
draw_custom_bone(scene, sl, v3d, rv3d, pchan->custom,
OB_WIRE, arm->flag, flag, index, PCHAN_CUSTOM_DRAW_SIZE(pchan));
glPopMatrix();
gpuPopMatrix();
}
}
}
@ -2269,9 +2265,9 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
}
}
glPushMatrix();
gpuPushMatrix();
if (arm->drawtype != ARM_ENVELOPE)
glMultMatrixf(pchan->pose_mat);
gpuMultMatrix3D(pchan->pose_mat);
/* catch exception for bone with hidden parent */
flag = bone->flag;
@ -2308,7 +2304,7 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
else
draw_bone(OB_WIRE, arm->flag, flag, constflag, index, bone->length);
glPopMatrix();
gpuPopMatrix();
}
}
@ -2369,16 +2365,16 @@ static void draw_pose_bones(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *
/* Draw additional axes on the bone tail */
if ((arm->flag & ARM_DRAWAXES) && (arm->flag & ARM_POSEMODE)) {
glPushMatrix();
gpuPushMatrix();
copy_m4_m4(bmat, pchan->pose_mat);
bone_matrix_translate_y(bmat, pchan->bone->length);
glMultMatrixf(bmat);
gpuMultMatrix3D(bmat);
float viewmat_pchan[4][4];
mul_m4_m4m4(viewmat_pchan, rv3d->viewmatob, bmat);
drawaxes(viewmat_pchan, pchan->bone->length * 0.25f, OB_ARROWS, col);
glPopMatrix();
gpuPopMatrix();
}
}
}
@ -2444,9 +2440,9 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
for (eBone = arm->edbo->first, index = 0; eBone; eBone = eBone->next, index++) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A) == 0) {
glPushMatrix();
gpuPushMatrix();
get_matrix_editbone(eBone, bmat);
glMultMatrixf(bmat);
gpuMultMatrix3D(bmat);
/* catch exception for bone with hidden parent */
flag = eBone->flag;
@ -2468,7 +2464,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
draw_bone(OB_SOLID, arm->flag, flag, 0, index, eBone->length);
}
glPopMatrix();
gpuPopMatrix();
}
}
}
@ -2506,9 +2502,9 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
draw_sphere_bone_wire(smat, imat, arm->flag, flag, 0, index, NULL, eBone);
}
else {
glPushMatrix();
gpuPushMatrix();
get_matrix_editbone(eBone, bmat);
glMultMatrixf(bmat);
gpuMultMatrix3D(bmat);
if (arm->drawtype == ARM_LINE)
draw_line_bone(arm->flag, flag, 0, index, NULL, eBone);
@ -2519,7 +2515,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
else
draw_bone(OB_WIRE, arm->flag, flag, 0, index, eBone->length);
glPopMatrix();
gpuPopMatrix();
}
/* offset to parent */
@ -2582,16 +2578,16 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
}
/* Draw additional axes */
if (arm->flag & ARM_DRAWAXES) {
glPushMatrix();
gpuPushMatrix();
get_matrix_editbone(eBone, bmat);
bone_matrix_translate_y(bmat, eBone->length);
glMultMatrixf(bmat);
gpuMultMatrix3D(bmat);
float viewmat_ebone[4][4];
mul_m4_m4m4(viewmat_ebone, rv3d->viewmatob, bmat);
drawaxes(viewmat_ebone, eBone->length * 0.25f, OB_ARROWS, col);
glPopMatrix();
gpuPopMatrix();
}
}

View File

@ -43,6 +43,7 @@
#include "BIF_glutil.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
@ -778,13 +779,13 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
unit_m4(imat);
}
glPushMatrix();
gpuPushMatrix();
if (t->spacetype == SPACE_VIEW3D) {
/* pass */
}
else if (t->spacetype == SPACE_IMAGE) {
glScalef(1.0f / t->aspect[0], 1.0f / t->aspect[1], 1.0f);
gpuScale2f(1.0f / t->aspect[0], 1.0f / t->aspect[1]);
}
else if (ELEM(t->spacetype, SPACE_IPO, SPACE_ACTION)) {
/* only scale y */
@ -794,7 +795,7 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
float ysize = BLI_rctf_size_y(datamask);
float xmask = BLI_rcti_size_x(mask);
float ymask = BLI_rcti_size_y(mask);
glScalef(1.0f, (ysize / xsize) * (xmask / ymask), 1.0f);
gpuScale2f(1.0f, (ysize / xsize) * (xmask / ymask));
}
depth_test_enabled = glIsEnabled(GL_DEPTH_TEST);
@ -815,7 +816,7 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
if (depth_test_enabled)
glEnable(GL_DEPTH_TEST);
glPopMatrix();
gpuPopMatrix();
}
}

View File

@ -138,7 +138,7 @@ void GPU_render_text(
else if (!col)
glColor3f(1.0f, 1.0f, 1.0f);
glPushMatrix();
gpuPushMatrix();
/* get the tab width */
ImBuf *first_ibuf = BKE_image_get_first_ibuf(ima);