From 306ab089693fe74ee02371f0fc2a55a5cc03d331 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Mon, 10 Nov 2014 22:51:05 -0500 Subject: [PATCH] cleaner texture release from bm_release() --- include/2d.h | 4 ++++ include/grgl1.h | 1 + src/bmpman/bmpman.cpp | 10 ++++------ src/graphics/grgl1.cpp | 2 ++ src/graphics/grgl1texture.cpp | 20 ++++++++++---------- src/graphics/grwxgl.cpp | 2 ++ 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/include/2d.h b/include/2d.h index ea31104..0a2b931 100644 --- a/include/2d.h +++ b/include/2d.h @@ -517,6 +517,8 @@ typedef struct screen { void (*gf_set_viewport)(int width, int height); void (*gf_activate)(int active); + + void (*gf_release_texture)(int handle); } screen; // handy macro @@ -690,6 +692,8 @@ void gr_set_clear_color(int r, int g, int b); #define gr_set_viewport GR_CALL(gr_screen.gf_set_viewport) +#define gr_release_texture GR_CALL(gr_screen.gf_release_texture) + void gr_force_fullscreen(); void gr_force_windowed(); void gr_toggle_fullscreen(); diff --git a/include/grgl1.h b/include/grgl1.h index bab99c3..85b6dbc 100644 --- a/include/grgl1.h +++ b/include/grgl1.h @@ -89,5 +89,6 @@ uint gr_opengl1_lock(); void gr_opengl1_unlock(); void gr_opengl1_zbias(int bias); void gr_opengl1_set_viewport(int width, int height); +void gr_opengl1_release_texture(int handle); #endif // _GROPENGL1_H diff --git a/src/bmpman/bmpman.cpp b/src/bmpman/bmpman.cpp index 153de4d..4194073 100644 --- a/src/bmpman/bmpman.cpp +++ b/src/bmpman/bmpman.cpp @@ -1874,8 +1874,6 @@ void bm_get_palette(int handle, ubyte *pal, char *name, const int name_len) // // returns: nothing -// opengl hack -void opengl1_free_texture_with_handle(int handle); void bm_release(int handle) { bitmap_entry *be; @@ -1901,10 +1899,10 @@ void bm_release(int handle) return; } -// until opengl mode gets a proper texture manager, this will have to do -#ifdef PLAT_UNIX - opengl1_free_texture_with_handle(handle); -#endif + // free texture, if we should + if (gr_screen.gf_release_texture) { + gr_release_texture(handle); + } bm_free_data(n); diff --git a/src/graphics/grgl1.cpp b/src/graphics/grgl1.cpp index 4ff0334..bc493b1 100644 --- a/src/graphics/grgl1.cpp +++ b/src/graphics/grgl1.cpp @@ -175,6 +175,8 @@ static void opengl1_init_func_pointers() gr_screen.gf_set_viewport = gr_opengl1_set_viewport; gr_screen.gf_activate = gr_opengl1_activate; + + gr_screen.gf_release_texture = gr_opengl1_release_texture; } void opengl1_init() diff --git a/src/graphics/grgl1texture.cpp b/src/graphics/grgl1texture.cpp index 6266f95..7a314a1 100644 --- a/src/graphics/grgl1texture.cpp +++ b/src/graphics/grgl1texture.cpp @@ -203,16 +203,6 @@ static int opengl1_free_texture ( tcache_slot_opengl *t ) return 1; } -void opengl1_free_texture_with_handle(int handle) -{ - for(int i=0; i