[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15264] trunk/blender/source:

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Jun 18 12:31:24 CEST 2008


Revision: 15264
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15264
Author:   blendix
Date:     2008-06-18 12:30:14 +0200 (Wed, 18 Jun 2008)

Log Message:
-----------

* Fix for a crash in game engine vertex array drawing with texfaces.
* For 2D filters, don't require opengl 2.0 but just the extensions,
  so it works on computers without full 2.0 support too.
* In debug mode, don't print memory statistics for preview render.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-06-18 09:52:31 UTC (rev 15263)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-06-18 10:30:14 UTC (rev 15264)
@@ -4434,7 +4434,7 @@
 	LampRen *lar;
 	
 	/* statistics for debugging render memory usage */
-	if(G.f & G_DEBUG) {
+	if((G.f & G_DEBUG) && (G.rendering)) {
 		if((re->r.scemode & R_PREVIEWBUTS)==0) {
 			BKE_image_print_memlist();
 			MEM_printmemlist_stats();

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp	2008-06-18 09:52:31 UTC (rev 15263)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp	2008-06-18 10:30:14 UTC (rev 15264)
@@ -54,11 +54,13 @@
 
 
 RAS_2DFilterManager::RAS_2DFilterManager():
-texturewidth(-1), textureheight(-1),
+texname(-1), texturewidth(-1), textureheight(-1),
 canvaswidth(-1), canvasheight(-1),
-numberoffilters(0),texname(-1)
+numberoffilters(0)
 {
-	isshadersupported = GLEW_VERSION_2_0;
+	isshadersupported = GLEW_ARB_shader_objects &&
+		GLEW_ARB_fragment_shader && GLEW_ARB_multitexture;
+
 	if(!isshadersupported)
 	{
 		std::cout<<"shaders not supported!" << std::endl;
@@ -81,7 +83,6 @@
 unsigned int RAS_2DFilterManager::CreateShaderProgram(char* shadersource)
 {
 		GLuint program = 0;	
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
 		GLuint fShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
         GLint success;
 
@@ -117,7 +118,7 @@
 			std::cout << "2dFilters - Shader program validation error" << std::endl;
 			return 0;
 		}
-#endif
+
 		return program;
 }
 
@@ -151,7 +152,6 @@
 
 void RAS_2DFilterManager::StartShaderProgram(unsigned int shaderprogram)
 {
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
 	GLint uniformLoc;
 	glUseProgramObjectARB(shaderprogram);
 	uniformLoc = glGetUniformLocationARB(shaderprogram, "bgl_RenderedTexture");
@@ -178,14 +178,11 @@
     {
 		glUniform1fARB(uniformLoc,textureheight);
     }
-#endif
 }
 
 void RAS_2DFilterManager::EndShaderProgram()
 {
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
 	glUseProgramObjectARB(0);
-#endif
 }
 
 void RAS_2DFilterManager::SetupTexture()
@@ -295,7 +292,6 @@
 {
 	if(!isshadersupported)
 		return;
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
 	if(pass<0 || pass>=MAX_RENDER_PASS)
 		return;
 
@@ -336,5 +332,4 @@
 		m_filters[pass] = CreateShaderProgram(mode);
 		m_enabled[pass] = 1;
 	}
-#endif
 }

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp	2008-06-18 09:52:31 UTC (rev 15263)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp	2008-06-18 10:30:14 UTC (rev 15264)
@@ -142,6 +142,9 @@
 		glColor3d(0,0,0);
 	}
 
+	EnableTextures(false);
+	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+
 	// use glDrawElements to draw each vertexarray
 	for (vt=0;vt<vertexarrays.size();vt++)
 	{
@@ -168,6 +171,8 @@
 
 
 	}
+
+	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 }
 
 void RAS_VAOpenGLRasterizer::IndexPrimitivesMulti( const vecVertexArray& vertexarrays,
@@ -281,6 +286,8 @@
 				break;
 			}
 		}
+
+		glClientActiveTextureARB(GL_TEXTURE0_ARB);
 	}
 
 	if(GLEW_ARB_vertex_program) {
@@ -359,10 +366,14 @@
 				break;
 			}
 		}
+
+		glClientActiveTextureARB(GL_TEXTURE0_ARB);
 	}
 	else {
-		if(enable) glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-		else glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+		if(texco_num) {
+			if(enable) glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+			else glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+		}
 	}
 
 	if(GLEW_ARB_vertex_program) {
@@ -383,5 +394,10 @@
 			}
 		}
 	}
+
+	if(!enable) {
+		m_last_texco_num = 0;
+		m_last_attrib_num = 0;
+	}
 }
 





More information about the Bf-blender-cvs mailing list