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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to