summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2010-02-12 22:45:29 +0000
committer Couriersud <couriersud@users.noreply.github.com>2010-02-12 22:45:29 +0000
commita7dea2f6eb60db69c12b5b64d95fd1ca953c9ed3 (patch)
tree4f7e64f0d2c9e2bda2cdcc4c05f27c647187e0b5
parent377fc28f9b42cf1d911b05752aec322e59e5a549 (diff)
- Revert changes accidentally committed.
This is WIP code using hash tables for texture lookups. Not yet stable.
-rw-r--r--src/osd/sdl/drawogl.c114
1 files changed, 4 insertions, 110 deletions
diff --git a/src/osd/sdl/drawogl.c b/src/osd/sdl/drawogl.c
index 2887c55d644..300b11fefd0 100644
--- a/src/osd/sdl/drawogl.c
+++ b/src/osd/sdl/drawogl.c
@@ -117,12 +117,6 @@ typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuin
#define GL_DEPTH_COMPONENT32 0x81A7
#endif
-//#define OLD_CODE 1
-
-#ifndef OLD_CODE
-#define HASH_SIZE ((1<<10)+1)
-#define OVERFLOW_SIZE (1<<10)
-#endif
// OSD headers
#include "osdsdl.h"
@@ -169,9 +163,7 @@ typedef void (*texture_copy_func)(texture_info *texture, const render_texinfo *t
/* texture_info holds information about a texture */
struct _texture_info
{
-#ifdef OLD_CODE
texture_info * next; // next texture in the list
-#endif
HashT hash; // hash value for the texture (must be >= pointer size)
UINT32 flags; // rendering flags
render_texinfo texinfo; // copy of the texture info
@@ -228,11 +220,7 @@ struct _sdl_info
int initialized; // is everything well initialized, i.e. all GL stuff etc.
// 3D info (GL mode only)
-#ifdef OLD_CODE
texture_info * texlist; // list of active textures
-#else
- texture_info * texhash[HASH_SIZE + OVERFLOW_SIZE];
-#endif
int last_blendmode; // previous blendmode
INT32 texture_max_width; // texture maximum width
INT32 texture_max_height; // texture maximum height
@@ -295,19 +283,10 @@ static const line_aa_step line_aa_4step[] =
// INLINES
//============================================================
-#ifdef OLD_CODE
INLINE HashT texture_compute_hash(const render_texinfo *texture, UINT32 flags)
{
return (HashT)texture->base ^ (flags & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK));
}
-#else
-INLINE HashT texture_compute_hash(const render_texinfo *texture, UINT32 flags)
-{
- HashT h = (HashT)texture ^ (flags & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK));
- //printf("hash %d\n", (int) h % HASH_SIZE);
- return (h >> 8) % HASH_SIZE;
-}
-#endif
INLINE void set_blendmode(sdl_info *sdl, int blendmode)
{
@@ -2560,24 +2539,9 @@ static texture_info *texture_create(sdl_window_info *window, const render_texinf
}
// add us to the texture list
-#ifdef OLD_CODE
texture->next = sdl->texlist;
sdl->texlist = texture;
-#else
- if (sdl->texhash[texture->hash] == NULL)
- sdl->texhash[texture->hash] = texture;
- else
- {
- int i;
- for (i = HASH_SIZE; i < HASH_SIZE + OVERFLOW_SIZE; i++)
- if (sdl->texhash[i] == NULL)
- {
- sdl->texhash[i] = texture;
- break;
- }
- assert(i < HASH_SIZE + OVERFLOW_SIZE);
- }
-#endif
+
if(sdl->usevbo)
{
// Generate And Bind The Texture Coordinate Buffer
@@ -2704,7 +2668,6 @@ static void texture_set_data(texture_info *texture, const render_texinfo *texsou
// texture_find
//============================================================
-#ifdef OLD_CODE
static texture_info *texture_find(sdl_info *sdl, const render_primitive *prim)
{
HashT texhash = texture_compute_hash(&prim->texture, prim->flags);
@@ -2723,55 +2686,6 @@ static texture_info *texture_find(sdl_info *sdl, const render_primitive *prim)
// nothing found
return NULL;
}
-#else
-
-#if 0
-static int compare_texinfo(render_texinfo *t1, render_texinfo *t2)
-{
- if (t1->base == t2->base &&
- t1->width == t2->width &&
- t1->height == t2->height &&
- t1->rowpixels == t2->rowpixels)
- return 1;
- else
- return 0;
-}
-#endif
-
-static int compare_texture_primitive(const texture_info *texture, const render_primitive *prim)
-{
- if (texture->texinfo.base == prim->texture.base &&
- texture->texinfo.width == prim->texture.width &&
- texture->texinfo.height == prim->texture.height &&
- texture->texinfo.rowpixels == prim->texture.rowpixels &&
- ((texture->flags ^ prim->flags) & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) == 0)
- return 1;
- else
- return 0;
-}
-
-static texture_info *texture_find(sdl_info *sdl, const render_primitive *prim)
-{
- HashT texhash = texture_compute_hash(&prim->texture, prim->flags);
- texture_info *texture;
-
- texture = sdl->texhash[texhash];
- if (texture != NULL)
- {
- int i;
- if (compare_texture_primitive(texture, prim))
- return texture;
- for (i=HASH_SIZE; i<HASH_SIZE + OVERFLOW_SIZE; i++)
- {
- texture = sdl->texhash[i];
- if (texture != NULL && compare_texture_primitive(texture, prim))
- return texture;
- }
- }
- return NULL;
-}
-
-#endif
//============================================================
// texture_update
@@ -3113,13 +3027,8 @@ static void texture_all_disable(sdl_info *sdl)
static void drawogl_destroy_all_textures(sdl_window_info *window)
{
sdl_info *sdl = (sdl_info *) window->dxdata;
- texture_info *texture = NULL;
+ texture_info *next_texture=NULL, *texture = NULL;
int lock=FALSE;
-#ifdef OLD_CODE
- texture_info *next_texture=NULL;
-#else
- int i;
-#endif
if (sdl == NULL)
return;
@@ -3137,26 +3046,16 @@ static void drawogl_destroy_all_textures(sdl_window_info *window)
osd_lock_acquire(window->primlist->lock);
}
+ texture = sdl->texlist;
glFinish();
texture_all_disable(sdl);
glFinish();
glDisableClientState(GL_VERTEX_ARRAY);
-#ifdef OLD_CODE
- texture = sdl->texlist;
while (texture)
{
next_texture = texture->next;
-#else
- i=0;
- while (i<HASH_SIZE+OVERFLOW_SIZE)
- {
- texture = sdl->texhash[i];
- sdl->texhash[i] = NULL;
- if (texture != NULL)
- {
-#endif
if(sdl->usevbo)
{
@@ -3195,15 +3094,10 @@ static void drawogl_destroy_all_textures(sdl_window_info *window)
texture->data_own=FALSE;
}
free(texture);
-#ifdef OLD_CODE
texture = next_texture;
}
sdl->texlist = NULL;
-#else
- }
- i++;
- }
-#endif
+
if ( sdl->useglsl )
{
glsl_shader_free(sdl->glsl);