[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42839] trunk/blender/source: Cleaning up the GPU_extensions_init/exit() code a bit to keep the Blenderplayer from crashing on exit and restart.

Mitchell Stokes mogurijin at gmail.com
Fri Dec 23 08:10:07 CET 2011


Revision: 42839
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42839
Author:   moguri
Date:     2011-12-23 07:10:01 +0000 (Fri, 23 Dec 2011)
Log Message:
-----------
Cleaning up the GPU_extensions_init/exit() code a bit to keep the Blenderplayer from crashing on exit and restart.

Modified Paths:
--------------
    trunk/blender/source/blender/gpu/intern/gpu_codegen.c
    trunk/blender/source/blender/gpu/intern/gpu_codegen.h
    trunk/blender/source/blender/gpu/intern/gpu_extensions.c
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp

Modified: trunk/blender/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_codegen.c	2011-12-23 05:42:06 UTC (rev 42838)
+++ trunk/blender/source/blender/gpu/intern/gpu_codegen.c	2011-12-23 07:10:01 UTC (rev 42839)
@@ -241,8 +241,13 @@
 	return (GPUFunction*)BLI_ghash_lookup(FUNCTION_HASH, (void *)name);
 }
 
-void GPU_extensions_exit(void)
+void GPU_codegen_init(void)
 {
+	GPU_code_generate_glsl_lib();
+}
+
+void GPU_codegen_exit(void)
+{
 	extern Material defmaterial;    // render module abuse...
 
 	if(defmaterial.gpumaterial.first)
@@ -253,8 +258,11 @@
 		FUNCTION_HASH = NULL;
 	}
 
-	if(glsl_material_library)
+	if(glsl_material_library) {
 		MEM_freeN(glsl_material_library);
+		glsl_material_library = NULL;
+	}
+
 	/*if(FUNCTION_PROTOTYPES) {
 		MEM_freeN(FUNCTION_PROTOTYPES);
 		FUNCTION_PROTOTYPES = NULL;

Modified: trunk/blender/source/blender/gpu/intern/gpu_codegen.h
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_codegen.h	2011-12-23 05:42:06 UTC (rev 42838)
+++ trunk/blender/source/blender/gpu/intern/gpu_codegen.h	2011-12-23 07:10:01 UTC (rev 42839)
@@ -178,6 +178,9 @@
 
 void GPU_pass_free(GPUPass *pass);
 
+void GPU_codegen_init(void);
+void GPU_codegen_exit(void);
+
 /* Material calls */
 
 const char *GPU_builtin_name(GPUBuiltin builtin);

Modified: trunk/blender/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_extensions.c	2011-12-23 05:42:06 UTC (rev 42838)
+++ trunk/blender/source/blender/gpu/intern/gpu_extensions.c	2011-12-23 07:10:01 UTC (rev 42839)
@@ -45,6 +45,7 @@
 
 #include "GPU_draw.h"
 #include "GPU_extensions.h"
+#include "gpu_codegen.h"
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -85,6 +86,8 @@
 
 /* GPU Extensions */
 
+static int gpu_extensions_init = 0;
+
 void GPU_extensions_disable(void)
 {
 	GG.extdisabled = 1;
@@ -96,11 +99,11 @@
 	const char *vendor, *renderer;
 
 	/* can't avoid calling this multiple times, see wm_window_add_ghostwindow */
-	static char init= 0;
-	if(init) return;
-	init= 1;
+	if(gpu_extensions_init) return;
+	gpu_extensions_init= 1;
 
 	glewInit();
+	GPU_codegen_init();
 
 	/* glewIsSupported("GL_VERSION_2_0") */
 
@@ -112,8 +115,6 @@
 	if (!GLEW_ARB_vertex_shader) GG.glslsupport = 0;
 	if (!GLEW_ARB_fragment_shader) GG.glslsupport = 0;
 
-	GPU_code_generate_glsl_lib();
-
 	glGetIntegerv(GL_RED_BITS, &r);
 	glGetIntegerv(GL_GREEN_BITS, &g);
 	glGetIntegerv(GL_BLUE_BITS, &b);
@@ -188,6 +189,12 @@
 #endif
 }
 
+void GPU_extensions_exit(void)
+{
+	gpu_extensions_init = 0;
+	GPU_codegen_exit();
+}
+
 int GPU_glsl_support(void)
 {
 	return !GG.extdisabled && GG.glslsupport;

Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2011-12-23 05:42:06 UTC (rev 42838)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2011-12-23 07:10:01 UTC (rev 42839)
@@ -789,6 +789,10 @@
 
 void GPG_Application::exitEngine()
 {
+	// We only want to kill the engine if it has been initialized
+	if (!m_engineInitialized)
+		return;
+
 	sound_exit();
 	if (m_ketsjiengine)
 	{




More information about the Bf-blender-cvs mailing list