[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48349] branches/soc-2012-swiss_cheese/ source/blender/gpu: Adding Axis Rotation function.
Alexander Kuznetsov
kuzsasha at gmail.com
Wed Jun 27 23:57:35 CEST 2012
Revision: 48349
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48349
Author: alexk
Date: 2012-06-27 21:57:24 +0000 (Wed, 27 Jun 2012)
Log Message:
-----------
Adding Axis Rotation function.
Clean up warnings.
Modified Paths:
--------------
branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h
branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_matrix.c
Modified: branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h 2012-06-27 21:41:17 UTC (rev 48348)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h 2012-06-27 21:57:24 UTC (rev 48349)
@@ -1,4 +1,4 @@
-
+#include "GPU_material.h"
#ifdef __cplusplus
extern "C" {
#endif
@@ -10,6 +10,8 @@
#define GPU_PROJECTION 1<<1
#define GPU_TEXTURE 1<<2
+void GPU_matrix_forced_update(void);
+
void GPU_ms_init(void);
void GPU_ms_exit(void);
@@ -29,9 +31,11 @@
void gpuLoadIdentity(void);
void gpuMultMatrix(const float *m);
+void gpuMultMatrixd(const double *m);
void gpuTranslate(float x, float y, float z);
void gpuScale(float x, float y, float z);
+void gpuRotateAxis(float angle, char axis);
void gpuOrtho(float left, float right, float bottom, float top, float nearVal, float farVal);
void gpuFrustum(float left, float right, float bottom, float top, float nearVal, float farVal);
@@ -41,7 +45,6 @@
void gpuLookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ);
-
#ifndef GPU_MAT_CAST_ANY
#define GPU_MAT_CAST_ANY
@@ -49,6 +52,7 @@
#define gpuLoadMatrix(m) gpuLoadMatrix((const float *) m);
#define gpuGetMatrix(m) gpuGetMatrix((float *) m);
#define gpuMultMatrix(m) gpuMultMatrix((const float *) m);
+#define gpuMultMatrixd(m) gpuMultMatrixd((const double *) m);
#endif
Modified: branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_matrix.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_matrix.c 2012-06-27 21:41:17 UTC (rev 48348)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_matrix.c 2012-06-27 21:57:24 UTC (rev 48349)
@@ -9,13 +9,16 @@
#define GPU_MAT_CAST_ANY
#include "GPU_matrix.h"
+
#ifdef GLES
#include <GLES2/gl2.h>
+#include "gpu_object_gles.h"
#else
#include <GL/glew.h>
#endif
#define GLU_STACK_DEBUG
+int glslneedupdate = 1;
typedef float GPU_matrix[4][4];
@@ -35,7 +38,14 @@
GPU_matrix_stack * ms_current;
+void GPU_matrix_forced_update(void)
+{
+ glslneedupdate = 1;
+ gpuMatrixCommit();
+ glslneedupdate = 1;
+
+}
#define CURMATRIX (ms_current->dynstack[ms_current->pos])
@@ -52,7 +62,7 @@
}
-#define CHECKMAT checkmat(CURMATRIX);
+#define CHECKMAT checkmat((float*)CURMATRIX);
#else
#define CHECKMAT
#endif
@@ -116,17 +126,17 @@
glGetIntegerv(GL_TEXTURE_STACK_DEPTH, glstackpos+2);
glGetIntegerv(GL_MATRIX_MODE, &glstackmode);
- glGetFloatv(GL_MODELVIEW_MATRIX, tm);
+ glGetFloatv(GL_MODELVIEW_MATRIX, (float*)tm);
gpuMatrixMode(GPU_MODELVIEW);
- gpuLoadMatrix(tm);
+ gpuLoadMatrix((float*)tm);
- glGetFloatv(GL_PROJECTION_MATRIX, tm);
+ glGetFloatv(GL_PROJECTION_MATRIX, (float*)tm);
gpuMatrixMode(GPU_PROJECTION);
- gpuLoadMatrix(tm);
+ gpuLoadMatrix((float*)tm);
- glGetFloatv(GL_TEXTURE_MATRIX, tm);
+ glGetFloatv(GL_TEXTURE_MATRIX, (float*)tm);
gpuMatrixMode(GPU_TEXTURE);
- gpuLoadMatrix(tm);
+ gpuLoadMatrix((float*)tm);
@@ -197,21 +207,48 @@
{
ms_modelview.changed = 0;
glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(ms_modelview.dynstack[ms_modelview.pos]);
+ glLoadMatrixf((float*)ms_modelview.dynstack[ms_modelview.pos]);
}
if(ms_projection.changed)
{
ms_projection.changed = 0;
glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(ms_projection.dynstack[ms_projection.pos]);
+ glLoadMatrixf((float*)ms_projection.dynstack[ms_projection.pos]);
}
if(ms_texture.changed)
{
ms_texture.changed = 0;
glMatrixMode(GL_TEXTURE);
- glLoadMatrixf(ms_texture.dynstack[ms_texture.pos]);
+ glLoadMatrixf((float*)ms_texture.dynstack[ms_texture.pos]);
}
+#else
+if(curglslesi)
+{
+#include REAL_GL_MODE
+ if(ms_modelview.changed || glslneedupdate)
+ {
+
+ float t[3][3] = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
+ copy_m3_m4(t, ms_modelview.dynstack[ms_modelview.pos]);
+ if(curglslesi->viewmatloc!=-1)
+ glUniformMatrix4fv(curglslesi->viewmatloc, 1, 0, ms_modelview.dynstack[ms_modelview.pos]);
+ if(curglslesi->normalmatloc!=-1)
+ glUniformMatrix3fv(curglslesi->normalmatloc, 1, 0, t);
+
+
+ }
+ if(ms_projection.changed|| glslneedupdate)
+ {
+ if(curglslesi->projectionmatloc!=-1)
+ glUniformMatrix4fv(curglslesi->projectionmatloc, 1, 0, ms_projection.dynstack[ms_projection.pos]);
+ }
+
+
+#include FAKE_GL_MODE
+}
+
+
#endif
CHECKMAT
}
@@ -233,7 +270,7 @@
}
- gpuLoadMatrix(ms_current->dynstack[ms_current->pos-1]);
+ gpuLoadMatrix((float*)ms_current->dynstack[ms_current->pos-1]);
CHECKMAT
}
@@ -284,7 +321,7 @@
void gpuLoadMatrix(const float * m)
{
- copy_m4_m4(CURMATRIX, m);
+ copy_m4_m4((float (*)[4])CURMATRIX, (float (*)[4])m);
ms_current->changed = 1;
CHECKMAT
}
@@ -294,7 +331,7 @@
if(m)
copy_m4_m4((float (*)[4])m,CURMATRIX);
else
- return CURMATRIX;
+ return (float*)(CURMATRIX);
ms_current->changed = 1;
return 0;
}
@@ -332,14 +369,33 @@
{
GPU_matrix cm;
- copy_m4_m4(cm, CURMATRIX);
+ copy_m4_m4((float (*)[4])cm, (float (*)[4])CURMATRIX);
- mult_m4_m4m4_q(CURMATRIX, cm, m);
+ mult_m4_m4m4_q(CURMATRIX, cm, (float (*)[4])m);
ms_current->changed = 1;
CHECKMAT
}
+
+void gpuMultMatrixd(const double *m)
+{
+ float mf[16];
+ int i;
+ for(i=0; i<16; i++)
+ mf[i] = m[i];
+ gpuMultMatrix(mf);
+
+}
+
+
+void gpuRotateAxis(float angle, char axis)
+{
+
+ rotate_m4((float (*)[4])CURMATRIX, axis, angle*M_PI/180.0f);
+ ms_current->changed = 1;
+}
+
void gpuLoadOrtho(float left, float right, float bottom, float top, float nearVal, float farVal)
{
mat4_ortho_set(CURMATRIX, left, right, bottom, top, nearVal, farVal);
@@ -354,7 +410,7 @@
mat4_ortho_set(om, left, right, bottom, top, nearVal, farVal);
- gpuMultMatrix(om);
+ gpuMultMatrix((float*)om);
CHECKMAT
}
@@ -363,7 +419,7 @@
{
GPU_matrix fm;
mat4_frustum_set(fm, left, right, bottom, top, nearVal, farVal);
- gpuMultMatrix(fm);
+ gpuMultMatrix((float*) fm);
CHECKMAT
}
@@ -388,9 +444,9 @@
mat4_look_from_origin(cm, lookdir, camup);
- gpuMultMatrix(cm);
+ gpuMultMatrix((float*) cm);
gpuTranslate(-eyeX, -eyeY, -eyeZ);
-CHECKMAT
+ CHECKMAT
}
More information about the Bf-blender-cvs
mailing list