[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45956] branches/soc-2011-cucumber/source/ gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVBO.cpp: Fixing up UVs when using VBOs in the BGE as well as removing some unnecessary OpenGL commands .

Daniel Stokes kupomail at gmail.com
Wed Apr 25 06:59:00 CEST 2012


Revision: 45956
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45956
Author:   kupoman
Date:     2012-04-25 04:58:59 +0000 (Wed, 25 Apr 2012)
Log Message:
-----------
Fixing up UVs when using VBOs in the BGE as well as removing some unnecessary OpenGL commands.

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

Modified: branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVBO.cpp
===================================================================
--- branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVBO.cpp	2012-04-25 03:44:01 UTC (rev 45955)
+++ branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVBO.cpp	2012-04-25 04:58:59 UTC (rev 45956)
@@ -88,8 +88,8 @@
 		memcpy(&this->vbo[j+6], data->m_vertex[i].getTangent(), sizeof(float)*4);
 		memcpy(&this->vbo[j+10], data->m_vertex[i].getRGBA(), sizeof(char)*4);
 
-		for (unsigned int k=0; k<RAS_TexVert::MAX_UNIT; k+=2)
-			memcpy(&this->vbo[j+11+k], data->m_vertex[i].getUV(k), sizeof(float)*2);
+		for (unsigned int k=0; k<RAS_TexVert::MAX_UNIT; k++)
+			memcpy(&this->vbo[j+11+(k*2)], data->m_vertex[i].getUV(k), sizeof(float)*2);
 	}
 
 	// Upload Data to GPU
@@ -131,41 +131,36 @@
 		for (int unit=0; unit<texco_num; ++unit)
 		{
 			glClientActiveTexture(GL_TEXTURE0_ARB + unit);
-
 			switch(texco[unit])
 			{
 				case RAS_IRasterizer::RAS_TEXCO_ORCO:
 				case RAS_IRasterizer::RAS_TEXCO_GLOB:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 					glTexCoordPointer(3, GL_FLOAT, this->stride, this->vertex_offset);
 					break;
 				case RAS_IRasterizer::RAS_TEXCO_UV:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 					glTexCoordPointer(2, GL_FLOAT, this->stride, (void*)((intptr_t)this->uv_offset+(sizeof(GLfloat)*2*unit)));
 					break;
 				case RAS_IRasterizer::RAS_TEXCO_NORM:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 					glTexCoordPointer(3, GL_FLOAT, this->stride, this->normal_offset);
 					break;
 				case RAS_IRasterizer::RAS_TEXTANGENT:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 					glTexCoordPointer(4, GL_FLOAT, this->stride, this->tangent_offset);
 					break;
 				default:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 					glTexCoordPointer(1, GL_SHORT, this->stride, this->dummy_offset);
 					break;
 			}
 		}
+		glClientActiveTextureARB(GL_TEXTURE0_ARB);
 	}
 	else //TexFace
 	{
-		glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
+		glClientActiveTextureARB(GL_TEXTURE0_ARB);
 		glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 		glTexCoordPointer(2, GL_FLOAT, this->stride, this->uv_offset);
 	}
@@ -179,22 +174,19 @@
 			{
 				case RAS_IRasterizer::RAS_TEXCO_ORCO:
 				case RAS_IRasterizer::RAS_TEXCO_GLOB:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glVertexAttribPointerARB(unit, 3, GL_FLOAT, GL_FALSE, this->stride, this->vertex_offset);
 					glEnableVertexAttribArrayARB(unit);
 					break;
 				case RAS_IRasterizer::RAS_TEXCO_UV:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
-					glVertexAttribPointerARB(unit, 2, GL_FLOAT, GL_FALSE, this->stride, (void*)((intptr_t)this->uv_offset+(sizeof(GLfloat)*2*uv++)));
+					glVertexAttribPointerARB(unit, 2, GL_FLOAT, GL_FALSE, this->stride, (void*)((intptr_t)this->uv_offset+uv));
+					uv += sizeof(GLfloat)*2;
 					glEnableVertexAttribArrayARB(unit);
 					break;
 				case RAS_IRasterizer::RAS_TEXCO_NORM:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glVertexAttribPointerARB(unit, 2, GL_FLOAT, GL_FALSE, stride, this->normal_offset);
 					glEnableVertexAttribArrayARB(unit);
 					break;
 				case RAS_IRasterizer::RAS_TEXTANGENT:
-					glBindBufferARB(GL_ARRAY_BUFFER_ARB, this->vbo_id);
 					glVertexAttribPointerARB(unit, 4, GL_FLOAT, GL_FALSE, this->stride, this->tangent_offset);
 					glEnableVertexAttribArrayARB(unit);
 					break;




More information about the Bf-blender-cvs mailing list