[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