[Bf-blender-cvs] [625f1a1] blender2.8: OpenGL: draw cameras using new matrix API
Mike Erwin
noreply at git.blender.org
Wed Oct 19 02:58:07 CEST 2016
Commit: 625f1a1c3058dd64a0814ba075b12ba0c5b28fcb
Author: Mike Erwin
Date: Tue Oct 18 20:57:36 2016 -0400
Branches: blender2.8
https://developer.blender.org/rB625f1a1c3058dd64a0814ba075b12ba0c5b28fcb
OpenGL: draw cameras using new matrix API
Also removed some extra push/pops.
Ref T49450
===================================================================
M source/blender/editors/space_view3d/drawobject.c
===================================================================
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index b41d4b2..5dfbfc4 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -90,6 +90,7 @@
#include "GPU_basic_shader.h"
#include "GPU_shader.h"
#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "ED_mesh.h"
#include "ED_screen.h"
@@ -1902,15 +1903,13 @@ static void drawcamera_stereo3d(
/* caller bound GPU_SHADER_3D_UNIFORM_COLOR, passed in pos attribute ID */
- glPushMatrix();
-
for (int i = 0; i < 2; i++) {
ob = BKE_camera_multiview_render(scene, ob, names[i]);
cam_lr[i] = ob->data;
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix3D(rv3d->viewmat);
BKE_camera_multiview_model_matrix(&scene->r, ob, names[i], obmat);
- glMultMatrixf(obmat);
+ gpuMultMatrix3D(obmat);
copy_m3_m3(vec_lr[i], vec);
copy_v3_v3(vec_lr[i][3], vec[3]);
@@ -1945,7 +1944,7 @@ static void drawcamera_stereo3d(
}
/* the remaining drawing takes place in the view space */
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix3D(rv3d->viewmat);
if (is_stereo3d_cameras) {
/* draw connecting lines */
@@ -2042,8 +2041,6 @@ static void drawcamera_stereo3d(
}
}
}
-
- glPopMatrix();
}
/* flag similar to draw_object() */
@@ -2111,6 +2108,8 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
BKE_camera_view_frame_ex(scene, cam, cam->drawsize, is_view, scale,
asp, shift, &drawsize, vec);
+ gpuMatrixBegin3D_legacy();
+
unsigned pos = add_attrib(immVertexFormat(), "pos", GL_FLOAT, 3, KEEP_FLOAT);
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
if (ob_wire_col) {
@@ -2126,13 +2125,13 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
float obmat[4][4];
bool is_left = v3d->multiview_eye == STEREO_LEFT_ID;
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
+ gpuPushMatrix();
+ gpuLoadMatrix3D(rv3d->viewmat);
BKE_camera_multiview_model_matrix(&scene->r, ob, is_left ? STEREO_LEFT_NAME : STEREO_RIGHT_NAME, obmat);
- glMultMatrixf(obmat);
+ gpuMultMatrix3D(obmat);
drawcamera_frame(vec, false, pos);
- glPopMatrix();
+ gpuPopMatrix();
}
else {
drawcamera_frame(vec, false, pos);
@@ -2141,6 +2140,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
if (is_view) {
immUnbindProgram();
+ gpuMatrixEnd();
return;
}
@@ -2183,9 +2183,8 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
copy_m4_m4(nobmat, ob->obmat);
normalize_m4(nobmat);
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
- glMultMatrixf(nobmat);
+ gpuLoadMatrix3D(rv3d->viewmat);
+ gpuMultMatrix3D(nobmat);
if (cam->flag & CAM_SHOWLIMITS) {
const unsigned char col[3] = {128, 128, 60}, col_hi[3] = {255, 255, 120};
@@ -2204,7 +2203,6 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
dflag, (is_active ? col_hi : col), pos);
}
}
- glPopMatrix();
}
}
@@ -2214,6 +2212,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
}
immUnbindProgram();
+ gpuMatrixEnd();
}
/* flag similar to draw_object() */
More information about the Bf-blender-cvs
mailing list