[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39041] branches/soc-2011-cucumber/source/ gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp: Fixed up RAS_StorageVA so TexFace works again.

Daniel Stokes kupomail at gmail.com
Fri Aug 5 04:44:55 CEST 2011


Revision: 39041
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39041
Author:   kupoman
Date:     2011-08-05 02:44:55 +0000 (Fri, 05 Aug 2011)
Log Message:
-----------
Fixed up RAS_StorageVA so TexFace works again.

Modified Paths:
--------------
    branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp

Modified: branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp
===================================================================
--- branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp	2011-08-05 01:21:08 UTC (rev 39040)
+++ branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp	2011-08-05 02:44:55 UTC (rev 39041)
@@ -72,7 +72,7 @@
 	GLenum drawmode;
 
 	if(!wireframe)
-		EnableTextures(true);
+		glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 
 	// use glDrawElements to draw each vertexarray
 	for(ms.begin(it); !ms.end(it); ms.next(it)) {
@@ -106,7 +106,7 @@
 		glVertexPointer(3, GL_FLOAT, stride, it.vertex->getXYZ());
 		glNormalPointer(GL_FLOAT, stride, it.vertex->getNormal());
 		if(!wireframe) {
-			TexCoordPtr(it.vertex);
+			glTexCoordPointer(2, GL_FLOAT, stride, it.vertex->getUV(0));
 			if(glIsEnabled(GL_COLOR_ARRAY))
 				glColorPointer(4, GL_UNSIGNED_BYTE, stride, it.vertex->getRGBA());
 		}
@@ -116,14 +116,66 @@
 	}
 
 	if(!wireframe) {
+		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 		glDisableClientState(GL_COLOR_ARRAY);
-		EnableTextures(false);
 	}
 }
 
 void RAS_StorageVA::IndexPrimitivesMulti(class RAS_MeshSlot& ms)
 {
-	IndexPrimitives(ms);
+	static const GLsizei stride = sizeof(RAS_TexVert);
+	bool wireframe = m_drawingmode <= RAS_IRasterizer::KX_WIREFRAME;
+	RAS_MeshSlot::iterator it;
+	GLenum drawmode;
+
+	if(!wireframe)
+		EnableTextures(true);
+
+	// use glDrawElements to draw each vertexarray
+	for(ms.begin(it); !ms.end(it); ms.next(it)) {
+		if(it.totindex == 0)
+			continue;
+
+		// drawing mode
+		if(it.array->m_type == RAS_DisplayArray::TRIANGLE)
+			drawmode = GL_TRIANGLES;
+		else if(it.array->m_type == RAS_DisplayArray::QUAD)
+			drawmode = GL_QUADS;
+		else
+			drawmode = GL_LINES;
+
+		// colors
+		if (drawmode != GL_LINES && !wireframe) {
+			if (ms.m_bObjectColor) {
+				const MT_Vector4& rgba = ms.m_RGBAcolor;
+
+				glDisableClientState(GL_COLOR_ARRAY);
+				glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]);
+			}
+			else {
+				glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+				glEnableClientState(GL_COLOR_ARRAY);
+			}
+		}
+		else
+			glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+
+		glVertexPointer(3, GL_FLOAT, stride, it.vertex->getXYZ());
+		glNormalPointer(GL_FLOAT, stride, it.vertex->getNormal());
+		if(!wireframe) {
+			TexCoordPtr(it.vertex);
+			if(glIsEnabled(GL_COLOR_ARRAY))
+				glColorPointer(4, GL_UNSIGNED_BYTE, stride, it.vertex->getRGBA());
+		}
+
+		// here the actual drawing takes places
+		glDrawElements(drawmode, it.totindex, GL_UNSIGNED_SHORT, it.index);
+	}
+
+	if(!wireframe) {
+		glDisableClientState(GL_COLOR_ARRAY);
+		EnableTextures(false);
+	}
 }
 
 void RAS_StorageVA::TexCoordPtr(const RAS_TexVert *tv)




More information about the Bf-blender-cvs mailing list