Commit: 74434beb1c50dcdf3174f29c80e25c6d75ccfae7 Author: Mike Erwin Date: Mon Mar 20 17:19:21 2017 -0400 Branches: blender2.8 https://developer.blender.org/rB74434beb1c50dcdf3174f29c80e25c6d75ccfae7
OpenGL: more legacy support for matrix routines For the sake of forward progress on T49450 We can now replace legacy gl* matrix function calls with their gpu equivalents. "Inactive" in this code means we're using the legacy matrix stacks, not our own. Setting up the proper gpuMatrixBegin2D/3D/End calls can be done afterward. Most or all of this will be removed after the transition to core profile. =================================================================== M source/blender/gpu/intern/gpu_matrix.c =================================================================== diff --git a/source/blender/gpu/intern/gpu_matrix.c b/source/blender/gpu/intern/gpu_matrix.c index c022301d6a..de443dce56 100644 --- a/source/blender/gpu/intern/gpu_matrix.c +++ b/source/blender/gpu/intern/gpu_matrix.c @@ -135,6 +135,13 @@ static void checkmat(cosnt float *m) void gpuPushMatrix(void) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glPushMatrix(); + return; + } +#endif + BLI_assert(state.mode != MATRIX_MODE_INACTIVE); BLI_assert(state.top < MATRIX_STACK_DEPTH); state.top++; @@ -146,6 +153,13 @@ void gpuPushMatrix(void) void gpuPopMatrix(void) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glPopMatrix(); + return; + } +#endif + BLI_assert(state.mode != MATRIX_MODE_INACTIVE); BLI_assert(state.top > 0); state.top--; @@ -154,6 +168,13 @@ void gpuPopMatrix(void) void gpuLoadMatrix3D(const float m[4][4]) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glLoadMatrixf((const float*) m); + return; + } +#endif + BLI_assert(state.mode == MATRIX_MODE_3D); copy_m4_m4(ModelView3D, m); CHECKMAT(ModelView3D); @@ -177,6 +198,11 @@ void gpuLoadIdentity(void) case MATRIX_MODE_2D: unit_m3(ModelView2D); break; +#if SUPPORT_LEGACY_MATRIX + case MATRIX_MODE_INACTIVE: + glLoadIdentity(); + break; +#endif default: BLI_assert(false); } @@ -185,6 +211,13 @@ void gpuLoadIdentity(void) void gpuTranslate2f(float x, float y) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glTranslatef(x, y, 0.0f); + return; + } +#endif + Mat3 m; unit_m3(m); m[2][0] = x; @@ -199,6 +232,13 @@ void gpuTranslate2fv(const float vec[2]) void gpuTranslate3f(float x, float y, float z) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glTranslatef(x, y, z); + return; + } +#endif + BLI_assert(state.mode == MATRIX_MODE_3D); #if 1 translate_m4(ModelView3D, x, y, z); @@ -244,6 +284,11 @@ void gpuScaleUniform(float factor) gpuMultMatrix2D(m); break; } +#if SUPPORT_LEGACY_MATRIX + case MATRIX_MODE_INACTIVE: + glScalef(factor, factor, factor); /* always scale Z since we can't distinguish 2D from 3D */ + break; +#endif default: BLI_assert(false); } @@ -251,6 +296,13 @@ void gpuScaleUniform(float factor) void gpuScale2f(float x, float y) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glScalef(x, y, 1.0f); + return; + } +#endif + Mat3 m = {{0.0f}}; m[0][0] = x; m[1][1] = y; @@ -265,6 +317,13 @@ void gpuScale2fv(const float vec[2]) void gpuScale3f(float x, float y, float z) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glScalef(x, y, z); + return; + } +#endif + Mat4 m = {{0.0f}}; m[0][0] = x; m[1][1] = y; @@ -280,6 +339,13 @@ void gpuScale3fv(const float vec[3]) void gpuMultMatrix3D(const float m[4][4]) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glMultMatrixf((const float*) m); + return; + } +#endif + BLI_assert(state.mode == MATRIX_MODE_3D); mul_m4_m4_post(ModelView3D, m); CHECKMAT(ModelView3D); @@ -302,6 +368,13 @@ void gpuRotate3f(float deg, float x, float y, float z) void gpuRotate3fv(float deg, const float axis[3]) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + glRotatef(deg, axis[0], axis[1], axis[2]); + return; + } +#endif + Mat4 m; axis_angle_to_mat4(m, axis, DEG2RADF(deg)); gpuMultMatrix3D(m); @@ -309,6 +382,20 @@ void gpuRotate3fv(float deg, const float axis[3]) void gpuRotateAxis(float deg, char axis) { +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + float a[3] = { 0.0f }; + switch (axis) { + case 'X': a[0] = 1.0f; break; + case 'Y': a[1] = 1.0f; break; + case 'Z': a[2] = 1.0f; break; + default: BLI_assert(false); /* bad axis */ + } + glRotatef(deg, a[0], a[1], a[2]); + return; + } +#endif + BLI_assert(state.mode == MATRIX_MODE_3D); #if 1 /* rotate_m4 works in place, right? */ rotate_m4(ModelView3D, axis, DEG2RADF(deg)); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs