about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-10 18:34:27 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-10 18:34:27 +0000
commit3729f4cbf3ab6a55e8aeb2c024655f0624028478 (patch)
tree4788ec2048048a12e273a51e9f0bd9d0f55e4b71
parentd7b0da8a0b39fe66e0eaeaadf8e2221fc4a614f8 (diff)
downloadzcatch-3729f4cbf3ab6a55e8aeb2c024655f0624028478.tar.gz
zcatch-3729f4cbf3ab6a55e8aeb2c024655f0624028478.zip
fixed error that occurs when you try to free the invalid texture texture
-rw-r--r--src/engine/client/ec_gfx.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/engine/client/ec_gfx.c b/src/engine/client/ec_gfx.c
index 24848deb..36e9e9fa 100644
--- a/src/engine/client/ec_gfx.c
+++ b/src/engine/client/ec_gfx.c
@@ -78,6 +78,8 @@ static float screen_y0 = 0;
 static float screen_x1 = 0;
 static float screen_y1 = 0;
 
+static int invalid_texture = 0;
+
 typedef struct
 {
 	GLuint tex;
@@ -221,7 +223,7 @@ int gfx_init()
     }
 	
     atexit(SDL_Quit);
-
+	
 	if(!no_gfx)
 	{
 		#ifdef CONF_FAMILY_WINDOWS
@@ -308,7 +310,7 @@ int gfx_init()
 	inp_init();
 	
 	/* create null texture, will get id=0 */
-	gfx_load_texture_raw(4,4,IMG_RGBA,null_texture_data,IMG_RGBA,TEXLOAD_NORESAMPLE);
+	invalid_texture = gfx_load_texture_raw(4,4,IMG_RGBA,null_texture_data,IMG_RGBA,TEXLOAD_NORESAMPLE);
 
 	/* perform some tests */
 	/* pixeltest_dotesting(); */
@@ -413,8 +415,12 @@ void gfx_set_vsync(int val)
 
 int gfx_unload_texture(int index)
 {
+	if(index == invalid_texture)
+		return 0;
+		
 	if(index < 0)
 		return 0;
+		
 	glDeleteTextures(1, &textures[index].tex);
 	textures[index].next = first_free_texture;
 	memory_usage -= textures[index].memsize;
@@ -463,7 +469,7 @@ int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_f
 	
 	/* don't waste memory on texture if we are stress testing */
 	if(config.dbg_stress || no_gfx)
-		return -1;
+		return 	invalid_texture;
 	
 	/* grab texture */
 	tex = first_free_texture;
@@ -559,7 +565,7 @@ int gfx_load_texture(const char *filename, int store_format, int flags)
 	IMAGE_INFO img;
 	
 	if(l < 3)
-		return 0;
+		return -1;
 	if(gfx_load_png(&img, filename))
 	{
 		if (store_format == IMG_AUTO)
@@ -570,7 +576,7 @@ int gfx_load_texture(const char *filename, int store_format, int flags)
 		return id;
 	}
 	
-	return 0;
+	return invalid_texture;
 }
 
 int gfx_load_png(IMAGE_INFO *img, const char *filename)
@@ -711,7 +717,9 @@ void gfx_texture_set(int slot)
 	dbg_assert(drawing == 0, "called gfx_texture_set within begin");
 	if(no_gfx) return;
 	if(slot == -1)
+	{
 		glDisable(GL_TEXTURE_2D);
+	}
 	else
 	{
 		glEnable(GL_TEXTURE_2D);