[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49728] branches/soc-2012-swiss_cheese/ source: Some matrix fixes to fix a GPU_SAFETY assertion in blf.c
Jason Wilkins
Jason.A.Wilkins at gmail.com
Thu Aug 9 11:14:50 CEST 2012
Revision: 49728
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49728
Author: jwilkins
Date: 2012-08-09 09:14:50 +0000 (Thu, 09 Aug 2012)
Log Message:
-----------
Some matrix fixes to fix a GPU_SAFETY assertion in blf.c
Changed gpuGetMatrix and removed gpuGetSpecificMatrix, we only really need one.
Added casts to gpuProject and gpuUnproject to quiet a lot of warnings. Hopefully this kind of macro will go away.
Made sure that default mode GL_MODELVIEW is reset after changing other matrixes
gpuGetMatrix returns a const pointer. It does not seem like a good idea to expose the internals of the matrix module.
Some white space formatting for gpuCommitMatrix, and other matrix functions.
note: gluPerspective is present in KX_Dome.cpp, but it is commented out
Some code in the RAS_OpenGLRasteriser.cpp used OpenGL as a scratch space to make a new matrix, I removed that and just did the calculation using Blender's matrix functions.
Modified Paths:
--------------
branches/soc-2012-swiss_cheese/source/blender/editors/screen/glutil.c
branches/soc-2012-swiss_cheese/source/blender/editors/sculpt_paint/paint_utils.c
branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_edit.c
branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_view.c
branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h
branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_extensions.c
branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_matrix.c
branches/soc-2012-swiss_cheese/source/blender/windowmanager/intern/wm_subwindow.c
branches/soc-2012-swiss_cheese/source/gameengine/GamePlayer/common/GPC_Canvas.cpp
branches/soc-2012-swiss_cheese/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_Camera.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_Dome.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp
Modified: branches/soc-2012-swiss_cheese/source/blender/editors/screen/glutil.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/screen/glutil.c 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/screen/glutil.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -635,8 +635,8 @@
glGetIntegerv(GL_VIEWPORT, (GLint *)di->orig_vp);
glGetIntegerv(GL_SCISSOR_BOX, (GLint *)di->orig_sc);
- gpuGetSpecificMatrix(GL_PROJECTION, (GLfloat *)di->orig_projmat);
- gpuGetSpecificMatrix(GL_MODELVIEW, (GLfloat *)di->orig_viewmat);
+ gpuGetMatrix(GL_PROJECTION_MATRIX, (GLfloat *)di->orig_projmat);
+ gpuGetMatrix(GL_MODELVIEW_MATRIX, (GLfloat *)di->orig_viewmat);
di->screen_rect = *screen_rect;
if (world_rect) {
@@ -691,8 +691,8 @@
{
const double badvalue = 1.0e-6;
- gpuGetSpecificMatrix(GL_MODELVIEW, mats->modelview);
- gpuGetSpecificMatrix(GL_PROJECTION, mats->projection);
+ gpuGetMatrix(GL_MODELVIEW_MATRIX, mats->modelview);
+ gpuGetMatrix(GL_PROJECTION_MATRIX, mats->projection);
glGetIntegerv(GL_VIEWPORT, (GLint *)mats->viewport);
/* Very strange code here - it seems that certain bad values in the
@@ -728,21 +728,20 @@
/* hack below is to mimic polygon offset */
gpuMatrixMode(GL_PROJECTION);
- gpuGetMatrix((float *)winmat);
-
+ gpuGetMatrix(GL_PROJECTION_MATRIX, (float *)winmat);
+
/* dist is from camera to center point */
if (winmat[15] > 0.5f) offs = 0.00001f * dist * viewdist; // ortho tweaking
else offs = 0.0005f * dist; // should be clipping value or so...
-
+
winmat[14] -= offs;
offset += offs;
-
+
gpuLoadMatrix(winmat);
gpuMatrixMode(GL_MODELVIEW);
}
else {
-
gpuMatrixMode(GL_PROJECTION);
winmat[14] += offset;
offset = 0.0;
Modified: branches/soc-2012-swiss_cheese/source/blender/editors/sculpt_paint/paint_utils.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/sculpt_paint/paint_utils.c 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/sculpt_paint/paint_utils.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -221,8 +221,8 @@
/* get the needed opengl matrices */
glGetIntegerv(GL_VIEWPORT, view);
- gpuGetSpecificMatrix(GL_MODELVIEW, (float *)model);
- gpuGetSpecificMatrix(GL_PROJECTION, (float *)proj);
+ gpuGetMatrix(GL_MODELVIEW_MATRIX, (float *)model);
+ gpuGetMatrix(GL_PROJECTION_MATRIX, (float *)proj);
view[0] = view[1] = 0;
/* project the verts */
Modified: branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_edit.c 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_edit.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -2601,12 +2601,8 @@
cent[2] = corner[2] = depth_close;
/* convert border to 3d coordinates */
- if ( (!gpuUnProject(cent,
- mats.modelview, mats.projection, (GLint *)mats.viewport,
- p)) ||
- (!gpuUnProject(corner,
- mats.modelview, mats.projection, (GLint *)mats.viewport,
- p_corner)))
+ if ( (!gpuUnProject(cent, mats.modelview, mats.projection, (GLint *)mats.viewport, p)) ||
+ (!gpuUnProject(corner, mats.modelview, mats.projection, (GLint *)mats.viewport, p_corner)))
{
return OPERATOR_CANCELLED;
}
@@ -2632,9 +2628,8 @@
cent[2] = depth_close;
/* convert the drawn rectangle into 3d space */
- if (depth_close != FLT_MAX && gpuUnProject(cent,
- mats.modelview, mats.projection, (GLint *)mats.viewport,
- p))
+ if (depth_close != FLT_MAX &&
+ gpuUnProject(cent, mats.modelview, mats.projection, (GLint *)mats.viewport, p))
{
new_ofs[0] = -p[0];
new_ofs[1] = -p[1];
@@ -3585,19 +3580,13 @@
cent[2] = view_autodist_depth_margin(ar, mval, 4);
- if (cent[3] == FLT_MAX)
+ if (cent[2] == FLT_MAX)
return 0;
cent[0] = mval[0];
cent[1] = mval[1];
- if (!gpuUnProject(cent,
- mats.modelview, mats.projection, (GLint *)mats.viewport, mouse_worldloc))
- {
- return 0;
- }
-
- return 1;
+ return gpuUnProject(cent, mats.modelview, mats.projection, (GLint *)mats.viewport, mouse_worldloc);
}
int ED_view3d_autodist_init(Scene *scene, ARegion *ar, View3D *v3d, int mode)
@@ -3636,13 +3625,7 @@
bgl_get_mats(&mats);
- if (!gpuUnProject(cent,
- mats.modelview, mats.projection, (GLint *)mats.viewport, mouse_worldloc))
- {
- return 0;
- }
-
- return 1;
+ return gpuUnProject(cent, mats.modelview, mats.projection, (GLint *)mats.viewport, mouse_worldloc);
}
int ED_view3d_autodist_depth(struct ARegion *ar, const int mval[2], int margin, float *depth)
Modified: branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_view.c 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_view.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -768,9 +768,7 @@
{
float win[] = {x, y, z};
- gpuUnProject(win, mats->modelview, mats->projection,
- (GLint *)mats->viewport, out);
-
+ gpuUnProject(win, mats->modelview, mats->projection, (GLint *)mats->viewport, out);
}
/* use view3d_get_object_project_mat to get projecting mat */
@@ -1070,7 +1068,7 @@
}
/* update matrix in 3d view region */
- gpuGetSpecificMatrix(GL_PROJECTION, (float *)rv3d->winmat);
+ gpuGetMatrix(GL_PROJECTION_MATRIX, (float *)rv3d->winmat);
}
static void obmat_to_viewmat(View3D *v3d, RegionView3D *rv3d, Object *ob, short smooth)
Modified: branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/GPU_matrix.h 2012-08-09 09:14:50 UTC (rev 49728)
@@ -55,8 +55,7 @@
GLenum gpuGetMatrixMode(void);
void gpuLoadMatrix(const GLfloat * m);
-GLfloat * gpuGetMatrix(GLfloat * m);
-GLfloat * gpuGetSpecificMatrix(GLenum type, GLfloat * m);
+const GLfloat * gpuGetMatrix(GLenum type, GLfloat * m);
void gpuLoadIdentity(void);
@@ -86,10 +85,14 @@
#endif
#if GPU_MAT_CAST_ANY
-#define gpuLoadMatrix(m) gpuLoadMatrix((const GLfloat *) m);
-#define gpuGetMatrix(m) gpuGetMatrix((GLfloat *) m);
-#define gpuMultMatrix(m) gpuMultMatrix((const GLfloat *) m);
-#define gpuMultMatrixd(m) gpuMultMatrixd((const double *) m);
+
+#define gpuLoadMatrix(m) gpuLoadMatrix((const GLfloat *)(m))
+#define gpuMultMatrix(m) gpuMultMatrix((const GLfloat *)(m))
+#define gpuMultMatrixd(m) gpuMultMatrixd((const double *)(m))
+
+#define gpuProject(o, m, p, v, w) gpuProject (o, (const GLfloat (*)[4])(m), (const GLfloat (*)[4])(p), v, w)
+#define gpuUnProject(w, m, p, v, o) gpuUnProject (w, (const GLfloat (*)[4])(m), (const GLfloat (*)[4])(p), v, o)
+
#endif
Modified: branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_extensions.c 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_extensions.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -927,12 +927,12 @@
glViewport(0, 0, GPU_texture_opengl_width(blurtex), GPU_texture_opengl_height(blurtex));
/* Peparing to draw quad */
- gpuMatrixMode(GL_MODELVIEW);
- gpuLoadIdentity();
gpuMatrixMode(GL_TEXTURE);
gpuLoadIdentity();
gpuMatrixMode(GL_PROJECTION);
gpuLoadIdentity();
+ gpuMatrixMode(GL_MODELVIEW); /* make sure last current matrix is modelview */
+ gpuLoadIdentity();
GPU_texture_bind(tex, 0);
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-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_matrix.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -179,21 +179,8 @@
glPushMatrix();
glMatrixMode(glstackmode);
- switch(glstackmode)
- {
- case GL_MODELVIEW:
- gpuMatrixMode(GL_MODELVIEW);
- break;
- case GL_TEXTURE:
- gpuMatrixMode(GL_TEXTURE);
- break;
- case GL_PROJECTION:
- gpuMatrixMode(GL_PROJECTION);
- break;
+ gpuMatrixMode(glstackmode);
- }
-
-
#endif
}
@@ -360,37 +347,28 @@
CHECKMAT
}
-GLfloat * gpuGetMatrix(GLfloat * m)
+const GLfloat * gpuGetMatrix(GLenum type, GLfloat *m)
{
- if(m)
- copy_m4_m4((GLfloat (*)[4])m, CURMATRIX);
- else
- return (GLfloat*)(CURMATRIX);
- ms_current->changed = 1;
- return 0;
-}
-
-GLfloat * gpuGetSpecificMatrix(GLenum type, GLfloat *m)
-{
GPU_matrix_stack * ms_select;
+ GPU_ASSERT(ELEM3(type, GL_MODELVIEW_MATRIX, GL_PROJECTION_MATRIX, GL_TEXTURE_MATRIX));
+
switch(type)
{
- case GL_MODELVIEW:
+ case GL_MODELVIEW_MATRIX:
ms_select = &ms_modelview;
break;
- case GL_PROJECTION:
+ case GL_PROJECTION_MATRIX:
ms_select = &ms_projection;
break;
- case GL_TEXTURE:
+ case GL_TEXTURE_MATRIX:
ms_select = & ms_texture;
break;
default:
- BLI_assert(0);
return 0;
}
- if(m)
+ if (m)
copy_m4_m4((GLfloat (*)[4])m, ms_select->dynstack[ms_select->pos]);
else
return (GLfloat*)(ms_select->dynstack[ms_select->pos]);
@@ -568,7 +546,7 @@
mult_m4_m4m4_q(pm, proj, model);
if(!invert_m4(pm))
- return 0;
+ return FALSE;
@@ -588,6 +566,6 @@
obj[0] = objd[0];
obj[1] = objd[1];
obj[2] = objd[2];
- return 1;
+ return TRUE;
}
Modified: branches/soc-2012-swiss_cheese/source/blender/windowmanager/intern/wm_subwindow.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/windowmanager/intern/wm_subwindow.c 2012-08-09 09:03:56 UTC (rev 49727)
+++ branches/soc-2012-swiss_cheese/source/blender/windowmanager/intern/wm_subwindow.c 2012-08-09 09:14:50 UTC (rev 49728)
@@ -142,9 +142,8 @@
wm_subwindow_getsize(win, swin->swinid, &width, &height);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list