Clean up the texture loader, and removing software renderer code paths.

git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@496 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2006-07-22 23:35:48 +00:00
parent 0c376b9854
commit a196f0af47
2 changed files with 33 additions and 243 deletions

View File

@ -802,78 +802,6 @@ void dataIMGPAGERelease(void *pData)
dataISpriteRelease(psSprite);
}
// Tertiles loader. This version for software renderer.
BOOL dataTERTILESLoad(UBYTE *pBuffer, UDWORD size, void **ppData)
{
if(pie_Hardware()) {
*ppData = NULL;
return TRUE;
}
// tile loader.
if (bTilesPCXLoaded)
{
debug( LOG_TEXTURE, "Reloading terrain tiles\n" );
if(!pie_PNGLoadMem((SBYTE *)pBuffer,&tilesPCX,NULL))
{
debug( LOG_ERROR, "TERTILES reload failed" );
return FALSE;
}
}
else
{
debug( LOG_TEXTURE, "Loading terrain tiles\n" );
if(!pie_PNGLoadMem((SBYTE *)pBuffer,&tilesPCX,NULL))
{
debug( LOG_ERROR, "TERTILES load failed" );
return FALSE;
}
}
/* Squirt the tiles into a nice long thin bitmap */
if (bTilesPCXLoaded)
{
if(!remakeTileTextures())
{
debug( LOG_ERROR, "Problem converting the terrain graphics file" );
return(FALSE);
}
}
else
{
if(!makeTileTextures())
{
debug( LOG_ERROR, "Problem converting the terrain graphics file" );
return(FALSE);
}
}
if (bTilesPCXLoaded)
{
*ppData = NULL;
}
else
{
bTilesPCXLoaded = TRUE;
*ppData = &tilesPCX;
}
debug( LOG_TEXTURE, "Tiles loaded\n" );
return TRUE;
}
void dataTERTILESRelease(void *pData)
{
iSprite *psSprite = (iSprite*) pData;
freeTileTextures();
if( psSprite->bmp )
{
free(psSprite->bmp);
psSprite->bmp = NULL;
}
bTilesPCXLoaded = FALSE;
}
// Tertiles loader. This version for hardware renderer.
BOOL dataHWTERTILESLoad(UBYTE *pBuffer, UDWORD size, void **ppData)
{
@ -1406,7 +1334,7 @@ static RES_TYPE_MIN ResourceTypes[]=
{"SCRIPTVAL", dataScriptLoadVals, NULL},
{"STR_RES", dataStrResLoad, dataStrResRelease},
{"IMGPAGE", dataIMGPAGELoad, dataIMGPAGERelease},
{"TERTILES", dataTERTILESLoad, dataTERTILESRelease}, // freed by 3d shutdow},// Tertiles Files. This version used when running with software renderer.
{"TERTILES", NULL, NULL}, // This version was used when running with the software renderer.
{"HWTERTILES", dataHWTERTILESLoad, dataHWTERTILESRelease}, // freed by 3d shutdow},// Tertiles Files. This version used when running with hardware renderer.
{"AUDIOCFG", dataAudioCfgLoad, NULL},
{"WAV", dataAudioLoad, dataAudioRelease},

View File

@ -1,18 +1,14 @@
/* Texture stuff. Calls 3dfxText functions in the 3dfx cases */
/* Alex McLean, Pumpkin Studios, EIDOS Interactive, 1997 */
/* Texture stuff. Alex McLean, Pumpkin Studios, EIDOS Interactive, 1997 */
#include "lib/framework/frame.h"
#include "lib/ivis_common/pietypes.h"
#include "lib/ivis_common/piestate.h"
// FIXME Direct iVis implementation include!
#include "lib/ivis_opengl/pietexture.h"
#include "lib/ivis_common/tex.h"
#include "lib/ivis_common/piepalette.h"
#include "lib/ivis_opengl/pietexture.h"
#include "display3ddef.h"
#include "texture.h"
#include "radar.h"
#include "lib/ivis_common/tex.h"
/* Can fit at most 32 texture pages into a 2meg texture memory */
#define MAX_TEXTURE_PAGES 32
@ -31,9 +27,8 @@ iSprite tilesPCX;
/* Stores the raw PCX data for the terrain tiles at load file time */
iBitmap **tilesRAW;
/* How many tiles have we loaded */
//UDWORD numTiles;
UDWORD numPCXTiles;
/* How many pages have we loaded (hardware)*/
/* How many pages have we loaded */
SDWORD firstTexturePage;
SDWORD numTexturePages;
int pageId[MAX_TERRAIN_PAGES];
@ -41,139 +36,19 @@ int pageId[MAX_TERRAIN_PAGES];
/* Presently all texture pages are 256*256 big */
typedef struct _texturePage
{
UDWORD pageNumber;
UDWORD cardAddress;
UDWORD pageNumber;
UDWORD cardAddress;
} TEXTURE_PAGE_3DFX;
TILE_TEX_INFO tileTexInfo[MAX_TILES];
static void getRectFromPage(UDWORD width, UDWORD height, unsigned char *src, UDWORD bufWidth, unsigned char *dest);
static void putRectIntoPage(UDWORD width, UDWORD height, unsigned char *dest, UDWORD bufWidth, unsigned char *src);
static UDWORD getTileXIndex(UDWORD tileNumber);
static UDWORD getTileYIndex(UDWORD tileNumber);
static void getRectFromPage(UDWORD width, UDWORD height, unsigned char *src, UDWORD bufWidth, unsigned char *dest);
static void putRectIntoPage(UDWORD width, UDWORD height, unsigned char *dest, UDWORD bufWidth, unsigned char *src);
static void buildTileIndexes(void);
/* Extracts the tile texture in pcx format of abc..
def..
ghi.. (say)
and puts them into raw format of
a
b
c
d
e
f
.
.
currently only used for software renderer
*/
int makeTileTextures(void)
{
UDWORD x, y, i, j, w, h, t;
iBitmap *b, *s, *saved;
w = tilesPCX.width / TILE_WIDTH;
h = tilesPCX.height / TILE_HEIGHT;
numPCXTiles = w * h;
debug(LOG_TEXTURE, "makeTileTextures: tile(%d,%d) num=%d", w, h, numPCXTiles);
tilesRAW = (iBitmap **) MALLOC(sizeof(iBitmap *) * numPCXTiles);
for (i=0; i<numPCXTiles; tilesRAW[i++] = NULL)
{
; /* NOP */
}
t = 0;
if (tilesRAW)
{
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
b = tilesPCX.bmp + j * TILE_WIDTH + i * tilesPCX.width * TILE_HEIGHT;
saved = s = tilesRAW[t++] = (iBitmap *)MALLOC(sizeof(iBitmap) * TILE_SIZE);
if (s)
{
for (y=0; y<TILE_HEIGHT; y++)
{
for (x=0; x<TILE_WIDTH; *s++ = b[x++])
{
; /* NOP */
}
b+=tilesPCX.width;
}
calcRadarColour(saved,t-1);
}
else
{
return FALSE;
}
}
}
}
else
{
return FALSE;
}
return TRUE;
}
int remakeTileTextures(void)
{
UDWORD x, y, i, j, w, h, t;
iBitmap *b, *s, *saved;
w = tilesPCX.width / TILE_WIDTH;
h = tilesPCX.height / TILE_HEIGHT;
ASSERT((numPCXTiles >= w * h,"remakeTileTextures: New Tertiles larger than existing version"));
debug(LOG_TEXTURE, "remakeTileTextures: tile(%d,%d) num=%d", w, h, numPCXTiles);
//tilesRAW is already set up
t = 0;
if (tilesRAW)
{
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
b = tilesPCX.bmp + j * TILE_WIDTH + i * tilesPCX.width * TILE_HEIGHT;
saved = s = tilesRAW[t++];
if (s)
{
for (y=0; y<TILE_HEIGHT; y++)
{
for (x=0; x<TILE_WIDTH; *s++ = b[x++])
{
; /* NOP */
}
b+=tilesPCX.width;
}
calcRadarColour(saved,t-1);
}
else
{
return FALSE;
}
}
}
}
else
{
return FALSE;
}
return TRUE;
}
/*
Extracts the tile textures into separate texture pages and builds
a table of which texture page to find each tile in, as well as which one it is
@ -194,14 +69,14 @@ int remakeTileTextures(void)
*/
void makeTileTexturePages(UDWORD srcWidth,UDWORD srcHeight, UDWORD tileWidth, UDWORD tileHeight, unsigned char *src)
{
UDWORD i,j;
UDWORD pageNumber;
UDWORD tilesAcross,tilesDown;
UDWORD tilesAcrossPage,tilesDownPage,tilesPerPage,tilesPerSource;
UDWORD tilesProcessed;
unsigned char *tileStorage;
unsigned char *presentLoc;
iSprite sprite;
UDWORD i,j;
UDWORD pageNumber;
UDWORD tilesAcross,tilesDown;
UDWORD tilesAcrossPage,tilesDownPage,tilesPerPage,tilesPerSource;
UDWORD tilesProcessed;
unsigned char *tileStorage;
unsigned char *presentLoc;
iSprite sprite;
/* This is how many pages are already used on hardware */
firstTexturePage = pie_GetLastPageDownloaded() + 1;
@ -274,14 +149,14 @@ exit:
void remakeTileTexturePages(UDWORD srcWidth,UDWORD srcHeight, UDWORD tileWidth, UDWORD tileHeight, unsigned char *src)
{
UDWORD i,j;
UDWORD pageNumber;
UDWORD tilesAcross,tilesDown;
UDWORD tilesAcrossPage,tilesDownPage,tilesPerPage,tilesPerSource;
UDWORD tilesProcessed;
unsigned char *tileStorage;
unsigned char *presentLoc;
iSprite sprite;
UDWORD i,j;
UDWORD pageNumber;
UDWORD tilesAcross,tilesDown;
UDWORD tilesAcrossPage,tilesDownPage,tilesPerPage,tilesPerSource;
UDWORD tilesProcessed;
unsigned char *tileStorage;
unsigned char *presentLoc;
iSprite sprite;
//check enough pages are allocated
debug(LOG_TEXTURE, "remakeTileTexturePages: src(%d,%d), tile(%d, %d)", srcWidth,
@ -361,8 +236,6 @@ BOOL getTileRadarColours(void)
h = tilesPCX.height / TILE_HEIGHT;
numPCXTiles = w * h;
t = 0;
for (i=0; i<h; i++)
{
@ -393,32 +266,21 @@ BOOL getTileRadarColours(void)
return TRUE;
}
void freeTileTextures( void )
void freeTileTextures(void)
{
UDWORD i;
if (!pie_Hardware())
{
for(i=0; i<numPCXTiles; i++)
{
FREE(tilesRAW[i]);
}
FREE(tilesRAW);
}
else
{
for(i=0; i< ((UDWORD)numTexturePages); i++)
for (i = 0; i < numTexturePages; i++)
{
FREE(_TEX_PAGE[(firstTexturePage+i)].tex.bmp);
}
}
}
static UDWORD getTileXIndex(UDWORD tileNumber)
{
UDWORD texPage;
UDWORD tileInPage;
UDWORD xIndex;
UDWORD texPage;
UDWORD tileInPage;
UDWORD xIndex;
texPage = tileNumber/16;
tileInPage = tileNumber - (texPage*16);
@ -428,9 +290,9 @@ UDWORD xIndex;
static UDWORD getTileYIndex(UDWORD tileNumber)
{
UDWORD texPage;
UDWORD tileInPage;
UDWORD yIndex;
UDWORD texPage;
UDWORD tileInPage;
UDWORD yIndex;
texPage = tileNumber/16;
tileInPage = tileNumber - (texPage*16);