Commit: 0a274df536251adbb7141f6baf8a95af89e50710 Author: Mike Erwin Date: Tue Mar 21 18:10:20 2017 -0400 Branches: blender2.8 https://developer.blender.org/rB0a274df536251adbb7141f6baf8a95af89e50710
OpenGL: add gpuLoadProjectionMatrix3D function Make an existing 4x4 matrix the current projection. Found a need for this while converting code to new API. Part of T49450 =================================================================== M source/blender/gpu/GPU_matrix.h M source/blender/gpu/intern/gpu_matrix.c =================================================================== diff --git a/source/blender/gpu/GPU_matrix.h b/source/blender/gpu/GPU_matrix.h index dd65d39822..d0194659db 100644 --- a/source/blender/gpu/GPU_matrix.h +++ b/source/blender/gpu/GPU_matrix.h @@ -106,6 +106,8 @@ void gpuRotate2D(float deg); /* 3D Projection Matrix */ +void gpuLoadProjectionMatrix3D(const float m[4][4]); + void gpuOrtho(float left, float right, float bottom, float top, float near, float far); void gpuFrustum(float left, float right, float bottom, float top, float near, float far); void gpuPerspective(float fovy, float aspect, float near, float far); @@ -174,6 +176,8 @@ bool gpuMatricesDirty(void); /* since last bind */ # define gpuMultMatrix3D(x) gpuMultMatrix3D((const float (*)[4])(x)) # define gpuLoadMatrix3D(x) gpuLoadMatrix3D((const float (*)[4])(x)) +# define gpuLoadProjectionMatrix3D(x) gpuLoadProjectionMatrix3D((const float (*)[4])(x)) + # define gpuMultMatrix2D(x) gpuMultMatrix2D((const float (*)[3])(x)) # define gpuLoadMatrix2D(x) gpuLoadMatrix2D((const float (*)[3])(x)) diff --git a/source/blender/gpu/intern/gpu_matrix.c b/source/blender/gpu/intern/gpu_matrix.c index cbef2d7373..8cc5117631 100644 --- a/source/blender/gpu/intern/gpu_matrix.c +++ b/source/blender/gpu/intern/gpu_matrix.c @@ -32,6 +32,8 @@ #define SUPPRESS_GENERIC_MATRIX_API #include "GPU_matrix.h" +#include "BIF_glutil.h" + #include "BLI_math_matrix.h" #include "BLI_math_rotation.h" #include "BLI_math_vector.h" @@ -185,6 +187,32 @@ void gpuLoadMatrix3D(const float m[4][4]) state.dirty = true; } +void gpuLoadProjectionMatrix3D(const float m[4][4]) +{ +#if SUPPORT_LEGACY_MATRIX + if (state.mode == MATRIX_MODE_INACTIVE) { + GLenum mode = glaGetOneInt(GL_MATRIX_MODE); + if (mode != GL_PROJECTION_MATRIX) { + glMatrixMode(GL_PROJECTION_MATRIX); + } + + glLoadMatrixf((const float*) m); + + if (mode != GL_PROJECTION_MATRIX) { + glMatrixMode(mode); /* restore */ + } + + state.dirty = true; + return; + } +#endif + + BLI_assert(state.mode == MATRIX_MODE_3D); + copy_m4_m4(Projection3D, m); + CHECKMAT(Projection3D); + state.dirty = true; +} + void gpuLoadMatrix2D(const float m[3][3]) { BLI_assert(state.mode == MATRIX_MODE_2D); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs