[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