[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48427] branches/soc-2012-swiss_cheese/ source: OpenGL Regression Fixes: Thanks to Jorge Bernal on Blender Artists.

Jason Wilkins Jason.A.Wilkins at gmail.com
Sat Jun 30 09:43:55 CEST 2012


Revision: 48427
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48427
Author:   jwilkins
Date:     2012-06-30 07:43:37 +0000 (Sat, 30 Jun 2012)
Log Message:
-----------
OpenGL Regression Fixes: Thanks to Jorge Bernal on Blender Artists.

Modified Paths:
--------------
    branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/editderivedmesh.c
    branches/soc-2012-swiss_cheese/source/blender/editors/include/UI_resources.h
    branches/soc-2012-swiss_cheese/source/blender/editors/interface/interface_widgets.c
    branches/soc-2012-swiss_cheese/source/blender/editors/interface/resources.c
    branches/soc-2012-swiss_cheese/source/blender/editors/interface/view2d.c
    branches/soc-2012-swiss_cheese/source/blender/editors/space_text/text_draw.c
    branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/drawanimviz.c
    branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_draw.c
    branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/view3d_fly.c
    branches/soc-2012-swiss_cheese/source/blender/editors/uvedit/uvedit_draw.c
    branches/soc-2012-swiss_cheese/source/blender/windowmanager/WM_api.h
    branches/soc-2012-swiss_cheese/source/blender/windowmanager/intern/wm_subwindow.c
    branches/soc-2012-swiss_cheese/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp

Modified: branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/cdderivedmesh.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/cdderivedmesh.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -941,7 +941,6 @@
 			
 			if (nors) nors += 3;
 		}
-		gpuImmediateUnformat();
 	}
 	else { /* use OpenGL VBOs or Vertex Arrays instead for better, faster rendering */
 		int prevstart = 0;
@@ -1058,7 +1057,7 @@
 			texco = GL_TRUE;
 		else {
 			attribMap_f[attrib_f] = attribs->tface[b].gl_index;
-			attribSize_f[attrib_f] = 3;
+			attribSize_f[attrib_f] = 2;
 			attrib_f++;
 		}
 	}
@@ -1175,7 +1174,7 @@
 		DEBUG_VBO("Using legacy code. cdDM_drawMappedFacesGLSL\n");
 		memset(&attribs, 0, sizeof(attribs));
 
-		cddm_format_attrib_vertex(&attribs);
+		cddm_format_attrib_vertex(&attribs); /* XXX: jwilkins, just to make this simple to write for now */
 		gpuBegin(GL_QUADS);
 
 		for (a = 0; a < dm->numTessFaceData; a++, mface++) {

Modified: branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/editderivedmesh.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/blenkernel/intern/editderivedmesh.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -987,6 +987,64 @@
 	emDM_drawFacesTex_common(dm, NULL, setDrawOptions, compareDrawOptions, userData);
 }
 
+static emdm_format_attrib_vertex(DMVertexAttribs *attribs)
+{
+	int b;
+	GLint attribMap_f[16];
+	GLint attribSize_f[16];
+	GLint attrib_f = 0;
+	GLint attribMap_ub[16];
+	GLint attribSize_ub[16];
+	GLint attrib_ub = 0;
+
+	/* orco texture coordinates */
+	if (attribs->totorco) {
+		attribMap_f[attrib_f] = attribs->orco.gl_index;
+		attribSize_f[attrib_f] = 3;
+		attrib_f++;
+	}
+
+	/* uv texture coordinates */
+	for (b = 0; b < attribs->tottface; b++) {
+		attribMap_f[attrib_f] = attribs->tface[b].gl_index;
+		attribSize_f[attrib_f] = 2;
+		attrib_f++;
+	}
+
+	/* vertex colors */
+	for (b = 0; b < attribs->totmcol; b++) {
+		attribMap_ub[attrib_ub] = attribs->mcol[b].gl_index;
+		attribSize_ub[attrib_ub] = 4;
+		attrib_ub++;
+	}
+
+	/* tangent for normal mapping */
+	if (attribs->tottang) {
+		attribMap_f[attrib_f] = attribs->tang.gl_index;
+		attribSize_f[attrib_f] = 3;
+		attrib_f++;
+	}
+
+	gpuImmediateFormatReset();
+
+	gpuImmediateElementSizes(3, 3, 0);
+
+	gpuImmediateFloatAttribCount(attrib_f);
+	gpuImmediateFloatAttribIndexMap(attribMap_f);
+	gpuImmediateFloatAttribSizes(attribSize_f);
+
+	gpuImmediateUbyteAttribCount(attrib_ub);
+	gpuImmediateUbyteAttribIndexMap(attribMap_ub);
+	gpuImmediateUbyteAttribSizes(attribMap_ub);
+
+	gpuImmediateLock();
+}
+
+static void emdm_unformat_attrib_vertex(void)
+{
+	gpuImmediateUnlock();
+}
+
 static void emDM_drawMappedFacesGLSL(DerivedMesh *dm,
                                      DMSetMaterial setMaterial,
                                      DMSetDrawOptions setDrawOptions,
@@ -1009,6 +1067,8 @@
 
 	memset(&attribs, 0, sizeof(attribs));
 
+	emdm_format_attrib_vertex(&attribs); /* XXX: jwilkins, just to make this easy to write for now */
+
 	/* always use smooth shading even for flat faces, else vertex colors wont interpolate */
 	glShadeModel(GL_SMOOTH);
 	BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE);
@@ -1049,8 +1109,13 @@
 		new_matnr = efa->mat_nr + 1;
 		if (new_matnr != matnr) {
 			do_draw = setMaterial(matnr = new_matnr, &gattribs);
-			if (do_draw)
+			if (do_draw) {
+				emdm_unformat_attrib_vertex();
+
 				DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+
+				emdm_format_attrib_vertex(&attribs);
+			}
 		}
 
 		if (do_draw) {
@@ -1105,6 +1170,8 @@
 			gpuEnd();
 		}
 	}
+
+	emdm_unformat_attrib_vertex();
 #undef PASSATTRIB
 }
 

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/include/UI_resources.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/include/UI_resources.h	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/include/UI_resources.h	2012-06-30 07:43:37 UTC (rev 48427)
@@ -244,6 +244,7 @@
 void    UI_ThemeAppendColorBlend(int colorid1, int colorid2, float fac);
 // same, with shade offset
 void    UI_ThemeColorBlendShade(int colorid1, int colorid2, float fac, int offset);
+void    UI_ThemeAppendColorBlendShade(int colorid1, int colorid2, float fac, int offset);
 void    UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int offset, int alphaoffset);
 
 // returns one value, not scaled

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/interface/interface_widgets.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/interface/interface_widgets.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/interface/interface_widgets.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -2169,8 +2169,6 @@
 	float rgb[3], hsv[3], v, range;
 	int color_profile = but->block->color_profile;
 
-	gpuImmediateFormat_C4_V3();
-
 	if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
 		color_profile = BLI_PR_NONE;
 
@@ -2204,8 +2202,8 @@
 	y = rect->ymin + v * (rect->ymax - rect->ymin);
 	CLAMP(y, rect->ymin + 3.0f, rect->ymax - 3.0f);
 
+	gpuImmediateFormat_C4_V3();
 	ui_hsv_cursor(x, y);
-
 	gpuImmediateUnformat();
 }
 

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/interface/resources.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/interface/resources.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/interface/resources.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -1068,7 +1068,7 @@
 {
 	int r, g, b;
 	const unsigned char *cp1, *cp2;
-	
+
 	cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
 	cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
 
@@ -1076,15 +1076,36 @@
 	r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
 	g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
 	b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
-	
+
 	CLAMP(r, 0, 255);
 	CLAMP(g, 0, 255);
 	CLAMP(b, 0, 255);
-	
+
 	gpuCurrentColor3ub(r, g, b);
 }
 
 // blend between to theme colors, shade it, and set it
+void UI_ThemeAppendColorBlendShade(int colorid1, int colorid2, float fac, int offset)
+{
+	int r, g, b;
+	const unsigned char *cp1, *cp2;
+
+	cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
+	cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
+
+	CLAMP(fac, 0.0f, 1.0f);
+	r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
+	g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
+	b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
+
+	CLAMP(r, 0, 255);
+	CLAMP(g, 0, 255);
+	CLAMP(b, 0, 255);
+
+	gpuColor3ub(r, g, b);
+}
+
+// blend between to theme colors, shade it, and set it
 void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int offset, int alphaoffset)
 {
 	int r, g, b, a;

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/interface/view2d.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/interface/view2d.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/interface/view2d.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -1336,6 +1336,8 @@
 	float lstep = step;
 	int level;
 
+	gpuImmediateFormat_V2();
+
 	for (level = 0; level < totlevels; ++level) {
 		int i;
 		float start;
@@ -1376,6 +1378,8 @@
 		lstep *= level_size;
 		offset -= 6;
 	}
+
+	gpuImmediateUnformat();
 }
 
 /* the price we pay for not exposting structs :( */

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/space_text/text_draw.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/space_text/text_draw.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/space_text/text_draw.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -1387,6 +1387,8 @@
 		x = st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
 		y = ar->winy - 3;
 
+		gpuImmediateFormat_V2();
+
 		if (y1 == y2) {
 			y -= y1 * st->lheight;
 			gpuBegin(GL_LINE_LOOP);
@@ -1423,6 +1425,8 @@
 			gpuVertex2i(x, y - st->lheight);
 			gpuEnd();
 		}
+
+		gpuImmediateUnformat();
 	}
 }
 
@@ -1464,6 +1468,7 @@
 	UI_ThemeColor(TH_BACK);
 	gpuSingleFilledRecti(x, y, x + boxw, y - boxh);
 	UI_ThemeColor(TH_SHADE1);
+	gpuImmediateFormat_V2();
 	gpuBegin(GL_LINE_LOOP);
 	gpuVertex2i(x, y);
 	gpuVertex2i(x + boxw, y);
@@ -1480,6 +1485,7 @@
 	gpuVertex2i(x + boxw - 4, y - boxh + 7);
 	gpuVertex2i(x + boxw - 7, y - boxh + 2);
 	gpuEnd();
+	gpuImmediateUnformat();
 	UI_ThemeColor(TH_TEXT);
 
 	BLF_draw_lock(mono);
@@ -1965,10 +1971,12 @@
 	if (st->flags & ST_SHOW_MARGIN) {
 		UI_ThemeColor(TH_HILITE);
 
+		gpuImmediateFormat_V2();
 		gpuBegin(GL_LINES);
 		gpuVertex2i(x + st->cwidth * st->margin_column, 0);
 		gpuVertex2i(x + st->cwidth * st->margin_column, ar->winy - 2);
 		gpuEnd();
+		gpuImmediateUnformat();
 	}
 
 	/* draw other stuff */

Modified: branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/drawanimviz.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/drawanimviz.c	2012-06-30 05:35:40 UTC (rev 48426)
+++ branches/soc-2012-swiss_cheese/source/blender/editors/space_view3d/drawanimviz.c	2012-06-30 07:43:37 UTC (rev 48427)
@@ -91,7 +91,9 @@
 	bMotionPathVert *mpv, *mpv_start;
 	int i, stepsize = avs->path_step;
 	int sfra, efra, sind, len;
-	
+
+	gpuImmediateFormat_V3();
+
 	/* get frame ranges */
 	if (avs->path_type == MOTIONPATH_TYPE_ACFRA) {
 		/* With "Around Current", we only choose frames from around 
@@ -105,7 +107,7 @@
 		sfra = avs->path_sf;
 		efra = avs->path_ef;
 	}
-	
+
 	/* no matter what, we can only show what is in the cache and no more 
 	 * - abort if whole range is past ends of path
 	 * - otherwise clamp endpoints to extents of path

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list