about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-03-29 11:55:42 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-03-29 11:55:42 +0000
commit1f246d9dcbc32e1049f4a8a6ac1777b313d9e547 (patch)
tree4a4e025a6211fedf7732d837e0027aa37e6e4d1a /src
parent7a3874745ca370a799d95b5f86e85fcc8eadefbb (diff)
downloadzcatch-1f246d9dcbc32e1049f4a8a6ac1777b313d9e547.tar.gz
zcatch-1f246d9dcbc32e1049f4a8a6ac1777b313d9e547.zip
fixed protection so that the fonts doesn't get resampled
Diffstat (limited to 'src')
-rw-r--r--src/engine/client/ec_client.c2
-rw-r--r--src/engine/client/ec_font.c9
-rw-r--r--src/engine/client/ec_gfx.c10
-rw-r--r--src/engine/e_if_client.h5
-rw-r--r--src/engine/e_if_gfx.h6
-rw-r--r--src/game/client/gc_hooks.cpp2
-rw-r--r--src/game/client/gc_map_image.cpp4
-rw-r--r--src/game/client/gc_skin.cpp4
-rw-r--r--src/game/editor/ed_editor.cpp12
-rw-r--r--src/game/editor/ed_io.cpp6
10 files changed, 34 insertions, 26 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c
index 72b5536f..b12fa503 100644
--- a/src/engine/client/ec_client.c
+++ b/src/engine/client/ec_client.c
@@ -508,7 +508,7 @@ void client_disconnect()
 
 static int client_load_data()
 {
-	debug_font = gfx_load_texture("data/debug_font.png", IMG_AUTO);
+	debug_font = gfx_load_texture("data/debug_font.png", IMG_AUTO, TEXLOAD_NORESAMPLE);
 	return 1;
 }
 
diff --git a/src/engine/client/ec_font.c b/src/engine/client/ec_font.c
index 707c481f..5d5c6df4 100644
--- a/src/engine/client/ec_font.c
+++ b/src/engine/client/ec_font.c
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <engine/e_system.h>
+#include <engine/e_client_interface.h>
 #include "ec_font.h"
 
 typedef struct
@@ -87,8 +88,8 @@ int font_load(FONT *font, const char *filename)
         return -1;
 }
 
-int gfx_load_texture(const char *filename, int store_format);
-#define IMG_ALPHA 2
+/*int gfx_load_texture(const char *filename, int store_format, int flags);
+#define IMG_ALPHA 2*/
 
 int font_set_load(FONT_SET *font_set, const char *font_filename, const char *text_texture_filename, const char *outline_texture_filename, int fonts, ...)
 {
@@ -119,8 +120,8 @@ int font_set_load(FONT_SET *font_set, const char *font_filename, const char *tex
         }
 
         font->size = size;
-        font->text_texture = gfx_load_texture(composed_text_texture_filename, IMG_ALPHA);
-        font->outline_texture = gfx_load_texture(composed_outline_texture_filename, IMG_ALPHA);
+        font->text_texture = gfx_load_texture(composed_text_texture_filename, IMG_ALPHA, TEXLOAD_NORESAMPLE);
+        font->outline_texture = gfx_load_texture(composed_outline_texture_filename, IMG_ALPHA, TEXLOAD_NORESAMPLE);
     }
 
     va_end(va);
diff --git a/src/engine/client/ec_gfx.c b/src/engine/client/ec_gfx.c
index 3efcdac7..661820ea 100644
--- a/src/engine/client/ec_gfx.c
+++ b/src/engine/client/ec_gfx.c
@@ -242,7 +242,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);
+	gfx_load_texture_raw(4,4,IMG_RGBA,null_texture_data,IMG_RGBA,TEXLOAD_NORESAMPLE);
 
 	/* set vsync as needed */
 	gfx_set_vsync(config.gfx_vsync);
@@ -373,7 +373,7 @@ static unsigned char sample(int w, int h, const unsigned char *data, int u, int
 	data[((v+1)*w+u+1)*4+offset])/4;
 }
 
-int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_format)
+int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_format, int flags)
 {
 	int mipmap = 1;
 	unsigned char *texdata = (unsigned char *)data;
@@ -392,7 +392,7 @@ int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_f
 	textures[tex].next = -1;
 	
 	/* resample if needed */
-	if(config.gfx_texture_quality==0)
+	if(!(flags&TEXLOAD_NORESAMPLE) && config.gfx_texture_quality==0)
 	{
 		if(w > 16 && h > 16 && format == IMG_RGBA)
 		{
@@ -476,7 +476,7 @@ int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_f
 }
 
 /* simple uncompressed RGBA loaders */
-int gfx_load_texture(const char *filename, int store_format)
+int gfx_load_texture(const char *filename, int store_format, int flags)
 {
 	int l = strlen(filename);
 	int id;
@@ -489,7 +489,7 @@ int gfx_load_texture(const char *filename, int store_format)
 		if (store_format == IMG_AUTO)
 			store_format = img.format;
 
-		id = gfx_load_texture_raw(img.width, img.height, img.format, img.data, store_format);
+		id = gfx_load_texture_raw(img.width, img.height, img.format, img.data, store_format, flags);
 		mem_free(img.data);
 		return id;
 	}
diff --git a/src/engine/e_if_client.h b/src/engine/e_if_client.h
index e921f9e9..3f490079 100644
--- a/src/engine/e_if_client.h
+++ b/src/engine/e_if_client.h
@@ -33,6 +33,11 @@ enum
 	IMG_RGBA=1,
 	IMG_ALPHA=2,
 	
+	/* Constants: Texture Loading Flags
+		TEXLOAD_NORESAMPLE - Prevents the texture from any resampling
+	*/
+	TEXLOAD_NORESAMPLE=1,
+	
 	/* Constants: Server Browser Sorting
 		BROWSESORT_NAME - Sort by name.
 		BROWSESORT_PING - Sort by ping.
diff --git a/src/engine/e_if_gfx.h b/src/engine/e_if_gfx.h
index 525633b4..57af6072 100644
--- a/src/engine/e_if_gfx.h
+++ b/src/engine/e_if_gfx.h
@@ -337,6 +337,7 @@ int gfx_load_png(IMAGE_INFO *img, const char *filename);
 	Arguments:
 		filename - Null terminated string to the file to load.
 		store_format - What format to store on gfx card as.
+		flags - controls how the texture is uploaded
 	
 	Returns:
 		An ID to the texture. -1 on failure.
@@ -344,7 +345,7 @@ int gfx_load_png(IMAGE_INFO *img, const char *filename);
 	See Also:
 		<gfx_unload_texture, gfx_load_png>
 */
-int gfx_load_texture(const char *filename, int store_format);
+int gfx_load_texture(const char *filename, int store_format, int flags);
 
 /*
 	Function: gfx_load_texture_raw
@@ -356,6 +357,7 @@ int gfx_load_texture(const char *filename, int store_format);
 		data - Pointer to the pixel data.
 		format - Format of the pixel data.
 		store_format - The format to store the texture on the graphics card.
+		flags - controls how the texture is uploaded
 	
 	Returns:
 		An ID to the texture. -1 on failure.
@@ -367,7 +369,7 @@ int gfx_load_texture(const char *filename, int store_format);
 	See Also:
 		<gfx_unload_texture>
 */
-int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_format);
+int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_format, int flags);
 
 /*
 	Function: gfx_texture_set
diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp
index ab63442c..4a0a0ecc 100644
--- a/src/game/client/gc_hooks.cpp
+++ b/src/game/client/gc_hooks.cpp
@@ -98,7 +98,7 @@ extern "C" void modc_init()
 	for(int i = 0; i < data->num_images; i++)
 	{
 		render_loading(load_current/load_total);
-		data->images[i].id = gfx_load_texture(data->images[i].filename, IMG_AUTO);
+		data->images[i].id = gfx_load_texture(data->images[i].filename, IMG_AUTO, 0);
 		load_current++;
 	}
 
diff --git a/src/game/client/gc_map_image.cpp b/src/game/client/gc_map_image.cpp
index 664a867a..65cb0608 100644
--- a/src/game/client/gc_map_image.cpp
+++ b/src/game/client/gc_map_image.cpp
@@ -111,12 +111,12 @@ int img_init()
 			char buf[256];
 			char *name = (char *)map_get_data(img->image_name);
 			str_format(buf, sizeof(buf), "data/mapres/%s.png", name);
-			map_textures[i] = gfx_load_texture(buf, IMG_AUTO);
+			map_textures[i] = gfx_load_texture(buf, IMG_AUTO, 0);
 		}
 		else
 		{
 			void *data = map_get_data(img->image_data);
-			map_textures[i] = gfx_load_texture_raw(img->width, img->height, IMG_RGBA, data, IMG_RGBA);
+			map_textures[i] = gfx_load_texture_raw(img->width, img->height, IMG_RGBA, data, IMG_RGBA, 0);
 			map_unload_data(img->image_data);
 		}
 	}
diff --git a/src/game/client/gc_skin.cpp b/src/game/client/gc_skin.cpp
index e7fd1fba..a876c960 100644
--- a/src/game/client/gc_skin.cpp
+++ b/src/game/client/gc_skin.cpp
@@ -32,7 +32,7 @@ static void skinscan(const char *name, int is_dir, void *user)
 		return;
 	}
 	
-	skins[num_skins].org_texture = gfx_load_texture_raw(info.width, info.height, info.format, info.data, info.format);
+	skins[num_skins].org_texture = gfx_load_texture_raw(info.width, info.height, info.format, info.data, info.format, 0);
 	
 	int body_size = 96; // body size
 	unsigned char *d = (unsigned char *)info.data;
@@ -105,7 +105,7 @@ static void skinscan(const char *name, int is_dir, void *user)
 			}
 	}
 	
-	skins[num_skins].color_texture = gfx_load_texture_raw(info.width, info.height, info.format, info.data, info.format);
+	skins[num_skins].color_texture = gfx_load_texture_raw(info.width, info.height, info.format, info.data, info.format, 0);
 	mem_free(info.data);
 
 	// set skin data	
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp
index 7ae46f0b..a7ef9576 100644
--- a/src/game/editor/ed_editor.cpp
+++ b/src/game/editor/ed_editor.cpp
@@ -1478,7 +1478,7 @@ static void replace_image(const char *filename)
 	gfx_unload_texture(img->tex_id);
 	*img = imginfo;
 	extract_name(filename, img->name);
-	img->tex_id = gfx_load_texture_raw(imginfo.width, imginfo.height, imginfo.format, imginfo.data, IMG_AUTO);
+	img->tex_id = gfx_load_texture_raw(imginfo.width, imginfo.height, imginfo.format, imginfo.data, IMG_AUTO, 0);
 }
 
 static void add_image(const char *filename)
@@ -1489,7 +1489,7 @@ static void add_image(const char *filename)
 
 	IMAGE *img = new IMAGE;
 	*img = imginfo;
-	img->tex_id = gfx_load_texture_raw(imginfo.width, imginfo.height, imginfo.format, imginfo.data, IMG_AUTO);
+	img->tex_id = gfx_load_texture_raw(imginfo.width, imginfo.height, imginfo.format, imginfo.data, IMG_AUTO, 0);
 	img->external = 1; // external by default
 	extract_name(filename, img->name);
 	editor.map.images.add(img);
@@ -2369,10 +2369,10 @@ void MAP::create_default(int entities_texture)
 
 extern "C" void editor_init()
 {
-	checker_texture = gfx_load_texture("data/editor/checker.png", IMG_AUTO);
-	background_texture = gfx_load_texture("data/editor/background.png", IMG_AUTO);
-	cursor_texture = gfx_load_texture("data/editor/cursor.png", IMG_AUTO);
-	entities_texture = gfx_load_texture("data/editor/entities.png", IMG_AUTO);
+	checker_texture = gfx_load_texture("data/editor/checker.png", IMG_AUTO, 0);
+	background_texture = gfx_load_texture("data/editor/background.png", IMG_AUTO, 0);
+	cursor_texture = gfx_load_texture("data/editor/cursor.png", IMG_AUTO, 0);
+	entities_texture = gfx_load_texture("data/editor/entities.png", IMG_AUTO, 0);
 	
 	tileset_picker.make_palette();
 	tileset_picker.readonly = true;
diff --git a/src/game/editor/ed_io.cpp b/src/game/editor/ed_io.cpp
index 3fd4fcac..9e0cd4a3 100644
--- a/src/game/editor/ed_io.cpp
+++ b/src/game/editor/ed_io.cpp
@@ -141,7 +141,7 @@ void editor_load_old(DATAFILE *df, MAP *map)
 			// copy image data
 			img->data = mem_alloc(img->width*img->height*4, 1);
 			mem_copy(img->data, data, img->width*img->height*4);
-			img->tex_id = gfx_load_texture_raw(img->width, img->height, img->format, img->data, IMG_AUTO);
+			img->tex_id = gfx_load_texture_raw(img->width, img->height, img->format, img->data, IMG_AUTO, 0);
 			map->images.add(img);
 			
 			// unload image
@@ -405,7 +405,7 @@ int MAP::load(const char *filename)
 					if(gfx_load_png(&imginfo, buf))
 					{
 						*img = imginfo;
-						img->tex_id = gfx_load_texture_raw(imginfo.width, imginfo.height, imginfo.format, imginfo.data, IMG_AUTO);
+						img->tex_id = gfx_load_texture_raw(imginfo.width, imginfo.height, imginfo.format, imginfo.data, IMG_AUTO, 0);
 						img->external = 1;
 					}
 				}
@@ -419,7 +419,7 @@ int MAP::load(const char *filename)
 					void *data = datafile_get_data(df, item->image_data);
 					img->data = mem_alloc(img->width*img->height*4, 1);
 					mem_copy(img->data, data, img->width*img->height*4);
-					img->tex_id = gfx_load_texture_raw(img->width, img->height, img->format, img->data, IMG_AUTO);
+					img->tex_id = gfx_load_texture_raw(img->width, img->height, img->format, img->data, IMG_AUTO, 0);
 				}
 
 				// copy image name