Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/gpu/GPU_matrix.h4
-rw-r--r--source/blender/gpu/intern/gpu_matrix.c28
2 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/gpu/GPU_matrix.h b/source/blender/gpu/GPU_matrix.h
index dd65d39822c..d0194659db5 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 cbef2d7373e..8cc51176310 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);