Merge pull request #28 from shpuld/feat/simplify-gltextures-tracking

This commit is contained in:
cypress 2023-09-27 12:04:28 -04:00 committed by GitHub
commit c0ecce2a8b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 306 additions and 401 deletions

View file

@ -25,6 +25,7 @@ void Draw_Init (void);
void Draw_Character (int x, int y, int num); void Draw_Character (int x, int y, int num);
void Draw_DebugChar (char num); void Draw_DebugChar (char num);
void Draw_Pic (int x, int y, qpic_t *pic); void Draw_Pic (int x, int y, qpic_t *pic);
void Draw_PicIndex (int x, int y, int width, int height, int texture_index);
void Draw_StretchPic (int x, int y, qpic_t *pic, int x_value, int y_value); void Draw_StretchPic (int x, int y, qpic_t *pic, int x_value, int y_value);
void Draw_ColorPic (int x, int y, qpic_t *pic, float r, float g , float b, float a); void Draw_ColorPic (int x, int y, qpic_t *pic, float r, float g , float b, float a);
void Draw_ColoredString (int x, int y, char *text, float r, float g, float b, float a, int scale); void Draw_ColoredString (int x, int y, char *text, float r, float g, float b, float a, int scale);
@ -47,6 +48,5 @@ extern int loading_step;
extern char loading_name[32]; extern char loading_name[32];
extern float loading_num_step; extern float loading_num_step;
qpic_t *Draw_PicFromWad (char *name);
qpic_t *Draw_CachePic (char *path); qpic_t *Draw_CachePic (char *path);
qpic_t *Draw_CacheImg (char *path); qpic_t *Draw_CacheImg (char *path);

View file

@ -498,8 +498,6 @@ void Host_ClearMemory (void)
{ {
Con_DPrintf ("Clearing memory\n"); Con_DPrintf ("Clearing memory\n");
D_FlushCaches ();
Mod_ClearAll (); Mod_ClearAll ();
if (host_hunklevel) if (host_hunklevel)
@ -706,7 +704,8 @@ void _Host_Frame (float time)
pass1+pass2+pass3, pass1, pass2, pass3); pass1+pass2+pass3, pass1, pass2, pass3);
} }
//Con_Printf ("%dkB free \n", pspSdkTotalFreeUserMemSize()/1024); // Debug log free memory
// if ((host_framecount % 120) == 0) Con_Printf ("%.2fkB free \n", pspSdkTotalFreeUserMemSize()/1024.f);
//frame speed counter //frame speed counter
fps_count++;//muff fps_count++;//muff

View file

@ -62,16 +62,16 @@ extern char* loadnamespec;
extern qboolean loadscreeninit; extern qboolean loadscreeninit;
// Backgrounds // Backgrounds
qpic_t *menu_bk; int menu_bk;
// Map screens // Map screens
qpic_t *menu_ndu; int menu_ndu;
qpic_t *menu_wh; int menu_wh;
//qpic_t *menu_kn; //qpic_t *menu_kn;
qpic_t *menu_ch; int menu_ch;
//qpic_t *menu_wn; //qpic_t *menu_wn;
qpic_t *menu_custom; int menu_custom;
qpic_t *menu_cuthum; int menu_cuthum;
typedef struct typedef struct
@ -79,6 +79,7 @@ typedef struct
int occupied; int occupied;
int map_allow_game_settings; int map_allow_game_settings;
int map_use_thumbnail; int map_use_thumbnail;
int thumbnail_index;
char* map_name; char* map_name;
char* map_name_pretty; char* map_name_pretty;
char* map_desc_1; char* map_desc_1;
@ -94,7 +95,8 @@ typedef struct
} usermap_t; } usermap_t;
SceIoStat custom_thumbnail_size; SceIoStat custom_thumbnail_size;
usermap_t custom_maps[50]; #define MAX_CUSTOM_MAPS 50
usermap_t custom_maps[MAX_CUSTOM_MAPS];
enum enum
{ {
@ -414,18 +416,18 @@ int M_Start_Cusor;
void M_Start_Menu_f () void M_Start_Menu_f ()
{ {
Load_Achivements();
M_Load_Menu_Pics();
key_dest = key_menu; key_dest = key_menu;
m_state = m_start; m_state = m_start;
m_entersound = true; m_entersound = true;
//loadingScreen = 0; //loadingScreen = 0;
Load_Achivements();
} }
static void M_Start_Menu_Draw () static void M_Start_Menu_Draw ()
{ {
// Background // Background
menu_bk = Draw_CacheImg("gfx/menu/menu_background"); Draw_PicIndex (0, 0, 480, 272, menu_bk);
Draw_Pic (0, 0, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -444,6 +446,23 @@ void M_Start_Key (int key)
break; break;
} }
} }
void M_Load_Menu_Pics ()
{
menu_bk = loadtextureimage("gfx/menu/menu_background", 0, 0, false, GU_LINEAR);
menu_ndu = loadtextureimage("gfx/menu/nacht_der_untoten", 0, 0, false, GU_LINEAR);
//menu_kn = Draw_CacheImg("gfx/menu/kino_der_toten");
menu_wh = loadtextureimage("gfx/menu/warehouse", 0, 0, false, GU_LINEAR);
//menu_wn = Draw_CacheImg("gfx/menu/wahnsinn");
menu_ch = loadtextureimage("gfx/menu/christmas_special", 0, 0, false, GU_LINEAR);
menu_custom = loadtextureimage("gfx/menu/custom", 0, 0, false, GU_LINEAR);
for (int i = 0; i < MAX_CUSTOM_MAPS; i++) {
if (custom_maps[i].occupied == false) continue;
if (custom_maps[i].map_use_thumbnail == false) continue;
custom_maps[i].thumbnail_index = loadtextureimage(custom_maps[i].map_thumbnail_path, 0, 0, false, GU_LINEAR);
}
}
//============================================================================= //=============================================================================
int M_Paused_Cusor; int M_Paused_Cusor;
@ -568,7 +587,7 @@ void M_Menu_Main_f (void)
void M_Main_Draw (void) void M_Main_Draw (void)
{ {
// Background // Background
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -800,6 +819,7 @@ void M_Exit_Key (int key)
case K_ENTER: case K_ENTER:
Cbuf_AddText("disconnect\n"); Cbuf_AddText("disconnect\n");
CL_ClearState (); CL_ClearState ();
M_Load_Menu_Pics();
M_Menu_Main_f(); M_Menu_Main_f();
break; break;
@ -848,7 +868,7 @@ void M_Menu_Map_f (void)
void M_Map_Draw (void) void M_Map_Draw (void)
{ {
// Background // Background
Draw_Pic(0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -875,8 +895,7 @@ void M_Map_Draw (void)
if (m_map_cursor == i) { if (m_map_cursor == i) {
if (custom_maps[i + multiplier].map_use_thumbnail == 1) { if (custom_maps[i + multiplier].map_use_thumbnail == 1) {
menu_cuthum = Draw_CacheImg(custom_maps[i + multiplier].map_thumbnail_path); Draw_PicIndex(256, 45, 175, 100, custom_maps[i].thumbnail_index);
Draw_StretchPic(256, 45, menu_cuthum, 175, 100);
} }
if (custom_maps[i + multiplier].map_name_pretty != 0) if (custom_maps[i + multiplier].map_name_pretty != 0)
@ -1036,6 +1055,7 @@ void M_Map_Key (int key)
Cbuf_AddText ("maxplayers 1\n"); Cbuf_AddText ("maxplayers 1\n");
Cbuf_AddText ("cd stop\n"); Cbuf_AddText ("cd stop\n");
Cbuf_AddText (va("map %s\n", custom_maps[m_map_cursor + multiplier].map_name)); Cbuf_AddText (va("map %s\n", custom_maps[m_map_cursor + multiplier].map_name));
Cbuf_Execute ();
loadingScreen = 1; loadingScreen = 1;
loadname2 = custom_maps[m_map_cursor + multiplier].map_name; loadname2 = custom_maps[m_map_cursor + multiplier].map_name;
if (custom_maps[m_map_cursor + multiplier].map_name_pretty != 0) if (custom_maps[m_map_cursor + multiplier].map_name_pretty != 0)
@ -1065,15 +1085,8 @@ void M_Menu_SinglePlayer_f (void)
void M_SinglePlayer_Draw (void) void M_SinglePlayer_Draw (void)
{ {
menu_ndu = Draw_CacheImg("gfx/menu/nacht_der_untoten");
//menu_kn = Draw_CacheImg("gfx/menu/kino_der_toten");
menu_wh = Draw_CacheImg("gfx/menu/warehouse");
//menu_wn = Draw_CacheImg("gfx/menu/wahnsinn");
menu_ch = Draw_CacheImg("gfx/menu/christmas_special");
menu_custom = Draw_CacheImg("gfx/menu/custom");
// Background // Background
Draw_Pic(0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -1126,7 +1139,7 @@ void M_SinglePlayer_Draw (void)
// Map description & pic // Map description & pic
switch(m_singleplayer_cursor) { switch(m_singleplayer_cursor) {
case 0: case 0:
Draw_StretchPic(256, 45, menu_ndu, 175, 100); Draw_PicIndex(256, 45, 175, 100, menu_ndu);
Draw_ColoredString(215, 155, "Desolate bunker located on a Ge-", 255, 255, 255, 255, 1); Draw_ColoredString(215, 155, "Desolate bunker located on a Ge-", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 165, "rman airfield, stranded after a", 255, 255, 255, 255, 1); Draw_ColoredString(215, 165, "rman airfield, stranded after a", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 175, "brutal plane crash surrounded by", 255, 255, 255, 255, 1); Draw_ColoredString(215, 175, "brutal plane crash surrounded by", 255, 255, 255, 255, 1);
@ -1137,19 +1150,19 @@ void M_SinglePlayer_Draw (void)
Draw_ColoredString(215, 225, "to the overwhelming onslaught?", 255, 255, 255, 255, 1); Draw_ColoredString(215, 225, "to the overwhelming onslaught?", 255, 255, 255, 255, 1);
break; break;
case 1: case 1:
Draw_StretchPic(256, 45, menu_wh, 175, 100); Draw_PicIndex(256, 45, 175, 100, menu_wh);
Draw_ColoredString(215, 155, "Old Warehouse full of Zombies!", 255, 255, 255, 255, 1); Draw_ColoredString(215, 155, "Old Warehouse full of Zombies!", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 165, "Fight your way to the Power", 255, 255, 255, 255, 1); Draw_ColoredString(215, 165, "Fight your way to the Power", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 175, "Switch through the Hordes!", 255, 255, 255, 255, 1); Draw_ColoredString(215, 175, "Switch through the Hordes!", 255, 255, 255, 255, 1);
break; break;
case 2: case 2:
Draw_StretchPic(256, 45, menu_ch, 175, 100); Draw_PicIndex(256, 45, 175, 100, menu_ch);
Draw_ColoredString(215, 155, "No Santa this year. Though we're", 255, 255, 255, 255, 1); Draw_ColoredString(215, 155, "No Santa this year. Though we're", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 165, "sure you will get presents from", 255, 255, 255, 255, 1); Draw_ColoredString(215, 165, "sure you will get presents from", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 175, "the undead! Will you accept them?", 255, 255, 255, 255, 1); Draw_ColoredString(215, 175, "the undead! Will you accept them?", 255, 255, 255, 255, 1);
break; break;
case 3: case 3:
Draw_StretchPic(256, 45, menu_custom, 175, 100); Draw_PicIndex(256, 45, 175, 100, menu_custom);
Draw_ColoredString(215, 155, "Custom Maps made by Community", 255, 255, 255, 255, 1); Draw_ColoredString(215, 155, "Custom Maps made by Community", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 165, "Members on the Fourm and on", 255, 255, 255, 255, 1); Draw_ColoredString(215, 165, "Members on the Fourm and on", 255, 255, 255, 255, 1);
Draw_ColoredString(215, 175, "Discord!", 255, 255, 255, 255, 1); Draw_ColoredString(215, 175, "Discord!", 255, 255, 255, 255, 1);
@ -1190,6 +1203,7 @@ void M_SinglePlayer_Key (int key)
Cbuf_AddText ("maxplayers 1\n"); Cbuf_AddText ("maxplayers 1\n");
Cbuf_AddText ("cd stop\n"); Cbuf_AddText ("cd stop\n");
Cbuf_AddText ("map ndu\n"); Cbuf_AddText ("map ndu\n");
Cbuf_Execute ();
loadingScreen = 1; loadingScreen = 1;
loadname2 = "ndu"; loadname2 = "ndu";
loadnamespec = "Nacht der Untoten"; loadnamespec = "Nacht der Untoten";
@ -1201,6 +1215,7 @@ void M_SinglePlayer_Key (int key)
Cbuf_AddText ("maxplayers 1\n"); Cbuf_AddText ("maxplayers 1\n");
Cbuf_AddText ("cd stop\n"); Cbuf_AddText ("cd stop\n");
Cbuf_AddText ("map warehouse\n"); Cbuf_AddText ("map warehouse\n");
Cbuf_Execute ();
loadingScreen = 1; loadingScreen = 1;
loadname2 = "warehouse"; loadname2 = "warehouse";
loadnamespec = "Warehouse"; loadnamespec = "Warehouse";
@ -1212,6 +1227,7 @@ void M_SinglePlayer_Key (int key)
Cbuf_AddText ("maxplayers 1\n"); Cbuf_AddText ("maxplayers 1\n");
Cbuf_AddText ("cd stop\n"); Cbuf_AddText ("cd stop\n");
Cbuf_AddText ("map christmas_special\n"); Cbuf_AddText ("map christmas_special\n");
Cbuf_Execute ();
loadingScreen = 1; loadingScreen = 1;
loadname2 = "christmas_special"; loadname2 = "christmas_special";
loadnamespec = "Christmas Special"; loadnamespec = "Christmas Special";
@ -1481,7 +1497,7 @@ void M_Achievement_Draw (void)
// Background // Background
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -1647,7 +1663,7 @@ void M_MultiPlayer_Draw (void)
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
//f = (int)(host_time * 10)%6; //f = (int)(host_time * 10)%6;
@ -1816,7 +1832,7 @@ void M_Setup_Draw (void)
{ {
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
if (setup_cursor == 0) if (setup_cursor == 0)
M_Print (64, 72, "Access Point"); M_Print (64, 72, "Access Point");
@ -2013,7 +2029,7 @@ void M_ServerList_Draw (void)
int serv, line; int serv, line;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -2203,7 +2219,7 @@ void M_SEdit_Draw (void)
{ {
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -2358,7 +2374,7 @@ void M_Net_Draw (void)
int f; int f;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -2691,7 +2707,7 @@ void M_Screen_Draw (void)
// Background // Background
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -2874,7 +2890,7 @@ void M_Audio_Draw (void)
float r; float r;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -2986,7 +3002,7 @@ void M_Gameplay_Draw (void)
// Background // Background
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -3166,7 +3182,7 @@ void M_Options_Draw (void)
{ {
// Background // Background
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -3400,7 +3416,7 @@ void M_Keys_Draw (void)
// Background // Background
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic(0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -3550,7 +3566,7 @@ void M_Menu_Credits_f (void)
void M_Credits_Draw (void) void M_Credits_Draw (void)
{ {
// Background // Background
Draw_Pic(0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
// Fill black to make everything easier to see // Fill black to make everything easier to see
Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102)); Draw_FillByColor(0, 0, 480, 272, GU_RGBA(0, 0, 0, 102));
@ -3739,7 +3755,7 @@ void M_Quit_Draw (void)
if (wasInMenus) if (wasInMenus)
{ {
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex (0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -4047,7 +4063,7 @@ void M_SerialConfig_Draw (void)
char *directModem; char *directModem;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -4301,7 +4317,7 @@ void M_ModemConfig_Draw (void)
int basex; int basex;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -4488,7 +4504,7 @@ void M_LanConfig_Draw (void)
char *protocol; char *protocol;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -4897,7 +4913,7 @@ void M_GameOptions_Draw (void)
int x; int x;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);
@ -5162,7 +5178,7 @@ void M_Search_Draw (void)
int x; int x;
if (key_dest != key_menu_pause) if (key_dest != key_menu_pause)
Draw_Pic (0, 0, menu_bk); Draw_PicIndex(0, 0, 480, 272, menu_bk);
//else //else
//Draw_AlphaPic (0, 0, pause_bk, 0.4); //Draw_AlphaPic (0, 0, pause_bk, 0.4);

View file

@ -56,6 +56,8 @@ int GL_LoadPalTex (const char *identifier, int width, int height, const byte *da
int GL_LoadPalletedTexture (byte *in, char *identifier, int width, int height, int mode); int GL_LoadPalletedTexture (byte *in, char *identifier, int width, int height, int mode);
void GL_UnloadTexture (const int texture_index); void GL_UnloadTexture (const int texture_index);
void GL_UnloadAllTextures ();
void GL_MarkTextureAsPermanent (const int texture_index);
extern int glx, gly, glwidth, glheight; extern int glx, gly, glwidth, glheight;
@ -169,7 +171,6 @@ typedef struct particle2_s
extern entity_t r_worldentity; extern entity_t r_worldentity;
extern qboolean r_cache_thrash; // compatability
extern vec3_t modelorg, r_entorigin; extern vec3_t modelorg, r_entorigin;
extern entity_t *currententity; extern entity_t *currententity;
extern int r_visframecount; // ??? what difs? extern int r_visframecount; // ??? what difs?

View file

@ -450,6 +450,8 @@ void QMB_InitParticles (void)
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
loading_cur_step++; loading_cur_step++;
strcpy(loading_name, "Particles"); strcpy(loading_name, "Particles");
SCR_UpdateScreen (); SCR_UpdateScreen ();
@ -476,6 +478,8 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
max_s = 384.0; max_t = 192.0; max_s = 384.0; max_t = 192.0;
for (i = 0, ti = 0 ; i < 2 ; i++) for (i = 0, ti = 0 ; i < 2 ; i++)
@ -501,6 +505,8 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
/*max_s = max_t = 128.0; /*max_s = max_t = 128.0;
for (i = 0, ti = 0 ; i < 2 ; i++) for (i = 0, ti = 0 ; i < 2 ; i++)
@ -516,6 +522,9 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
max_s = max_t = 256.0; max_s = max_t = 256.0;
ADD_PARTICLE_TEXTURE(ptex_flame, particleimage, 0, 1, 0, 0, 256, 256); ADD_PARTICLE_TEXTURE(ptex_flame, particleimage, 0, 1, 0, 0, 256, 256);
@ -528,6 +537,8 @@ void QMB_InitParticles (void)
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
max_s = 256.0; max_t = 128.0; max_s = 256.0; max_t = 128.0;
ADD_PARTICLE_TEXTURE(ptex_lightning, particleimage, 0, 1, 0, 0, 256, 128);//R00k changed ADD_PARTICLE_TEXTURE(ptex_lightning, particleimage, 0, 1, 0, 0, 256, 128);//R00k changed
@ -540,6 +551,9 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
//max_s = max_t = 256.0; //max_s = max_t = 256.0;
ADD_PARTICLE_TEXTURE(ptex_muzzleflash, particleimage, 0, 1, 0, 0, 128, 128); ADD_PARTICLE_TEXTURE(ptex_muzzleflash, particleimage, 0, 1, 0, 0, 128, 128);
@ -555,6 +569,9 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
//max_s = max_t = 256.0; //max_s = max_t = 256.0;
ADD_PARTICLE_TEXTURE(ptex_muzzleflash2, particleimage, 0, 1, 0, 0, 128, 128); ADD_PARTICLE_TEXTURE(ptex_muzzleflash2, particleimage, 0, 1, 0, 0, 128, 128);
@ -565,6 +582,9 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
//max_s = max_t = 256.0; //max_s = max_t = 256.0;
ADD_PARTICLE_TEXTURE(ptex_muzzleflash3, particleimage, 0, 1, 0, 0, 128, 128); ADD_PARTICLE_TEXTURE(ptex_muzzleflash3, particleimage, 0, 1, 0, 0, 128, 128);
@ -579,6 +599,9 @@ void QMB_InitParticles (void)
//Clear_LoadingFill (); //Clear_LoadingFill ();
return; return;
} }
GL_MarkTextureAsPermanent(particleimage);
//max_s = max_t = 256.0; //max_s = max_t = 256.0;
ADD_PARTICLE_TEXTURE(ptex_bloodcloud, particleimage, 0, 1, 0, 0, 64, 64); ADD_PARTICLE_TEXTURE(ptex_bloodcloud, particleimage, 0, 1, 0, 0, 64, 64);

View file

@ -47,7 +47,6 @@ qpic_t *sniper_scope;
int translate_texture; int translate_texture;
int char_texture; int char_texture;
int detail_texture;
//int zombie_skins[3][8]; //int zombie_skins[3][8];
int zombie_skins[2][2]; int zombie_skins[2][2];
int ref_texture; int ref_texture;
@ -101,6 +100,7 @@ void VID_SetPalette4(unsigned char* clut4pal);
#define MAX_GLTEXTURES 1024 #define MAX_GLTEXTURES 1024
gltexture_t gltextures[MAX_GLTEXTURES]; gltexture_t gltextures[MAX_GLTEXTURES];
bool gltextures_used[MAX_GLTEXTURES]; bool gltextures_used[MAX_GLTEXTURES];
bool gltextures_is_permanent[MAX_GLTEXTURES];
int numgltextures; int numgltextures;
typedef struct typedef struct
@ -131,6 +131,7 @@ void GL_InitTextureUsage ()
{ {
for (int i=0; i<MAX_GLTEXTURES; i++) { for (int i=0; i<MAX_GLTEXTURES; i++) {
gltextures_used[i] = false; gltextures_used[i] = false;
gltextures_is_permanent[i] = false;
} }
numgltextures = 0; numgltextures = 0;
} }
@ -323,19 +324,6 @@ static int GL_LoadPicTexture (qpic_t *pic)
return GL_LoadTexture ("", pic->width, pic->height, pic->data, qfalse, GU_NEAREST, 0); return GL_LoadTexture ("", pic->width, pic->height, pic->data, qfalse, GU_NEAREST, 0);
} }
qpic_t *Draw_PicFromWad (char *name)
{
qpic_t *p;
glpic_t *gl;
p = static_cast<qpic_t*>(W_GetLumpName (name));
gl = (glpic_t *)p->data;
gl->index = GL_LoadPicTexture (p);
return p;
}
/* /*
================ ================
Draw_CachePic Draw_CachePic
@ -372,7 +360,8 @@ qpic_t *Draw_CachePic (char *path)
gltextures[index].islmp = qfalse; gltextures[index].islmp = qfalse;
gl = (glpic_t *)pic->pic.data; gl = (glpic_t *)pic->pic.data;
gl->index = index; gl->index = index;
GL_MarkTextureAsPermanent(gl->index);
return &pic->pic; return &pic->pic;
} }
@ -395,6 +384,7 @@ qpic_t *Draw_CachePic (char *path)
gl = (glpic_t *)pic->pic.data; gl = (glpic_t *)pic->pic.data;
gl->index = GL_LoadPicTexture (dat); gl->index = GL_LoadPicTexture (dat);
GL_MarkTextureAsPermanent(gl->index);
gltextures[gl->index].islmp = qtrue; gltextures[gl->index].islmp = qtrue;
return &pic->pic; return &pic->pic;
@ -402,7 +392,7 @@ qpic_t *Draw_CachePic (char *path)
/* /*
================ ================
Draw_CachePic Draw_CacheImg
================ ================
*/ */
qpic_t *Draw_CacheImg (char *path) qpic_t *Draw_CacheImg (char *path)
@ -433,6 +423,7 @@ qpic_t *Draw_CacheImg (char *path)
gl = (glpic_t *)pic->pic.data; gl = (glpic_t *)pic->pic.data;
gl->index = index; gl->index = index;
GL_MarkTextureAsPermanent(gl->index);
return &pic->pic; return &pic->pic;
} }
@ -453,6 +444,7 @@ qpic_t *Draw_CacheImg (char *path)
gl = (glpic_t *)pic->pic.data; gl = (glpic_t *)pic->pic.data;
gl->index = GL_LoadPicTexture (dat); gl->index = GL_LoadPicTexture (dat);
GL_MarkTextureAsPermanent(gl->index);
return &pic->pic; return &pic->pic;
} }
@ -528,32 +520,20 @@ void Draw_Init (void)
// it into a texture // it into a texture
nonetexture = GL_LoadTexture ("nonetexture", 8, 8, (byte*)nontexdt, qfalse, GU_NEAREST, 0); nonetexture = GL_LoadTexture ("nonetexture", 8, 8, (byte*)nontexdt, qfalse, GU_NEAREST, 0);
GL_MarkTextureAsPermanent(nonetexture);
R_CreateDlightImage(); R_CreateDlightImage();
// now turn them into textures // now turn them into textures
char_texture = loadtextureimage ("gfx/charset", 0, 0, qfalse, GU_NEAREST); char_texture = loadtextureimage ("gfx/charset", 0, 0, qfalse, GU_NEAREST);
GL_MarkTextureAsPermanent(char_texture);
if (char_texture == 0)// did not find a matching TGA... if (char_texture == 0)// did not find a matching TGA...
Sys_Error ("Could not load charset, make sure you have every folder and file installed properly\nDouble check that all of your files are in their correct places\nAnd that you have installed the game properly.\nRefer to the readme.txt file for help\n"); Sys_Error ("Could not load charset, make sure you have every folder and file installed properly\nDouble check that all of your files are in their correct places\nAnd that you have installed the game properly.\nRefer to the readme.txt file for help\n");
detail_texture = loadtextureimage ("gfx/detail", 0, 0, qfalse, GU_LINEAR);
if (detail_texture == 0)// did not find a matching TGA...
{
detail = static_cast<byte*>(COM_LoadTempFile ("gfx/detail.lmp"));
if (!detail)
{
//Con_Printf ("Couldn't load gfx/detail \n"); FIXME no point?
detail_texture = nonetexture;
}
else
detail_texture = GL_LoadTexture ("Detail", 256, 256, detail, qfalse, GU_LINEAR, 3);
}
sniper_scope = Draw_CachePic ("gfx/hud/scope_256"); sniper_scope = Draw_CachePic ("gfx/hud/scope_256");
// GL_MarkTextureAsPermanent(sniper_scope);
zombie_skins[0][0] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR); zombie_skins[0][0] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR);
GL_MarkTextureAsPermanent(zombie_skins[0][0]);
// PSP PHAT: Only have 1 Zombie skin.. this saves 192kB of VRAM, well worth it. // PSP PHAT: Only have 1 Zombie skin.. this saves 192kB of VRAM, well worth it.
#ifdef SLIM #ifdef SLIM
@ -561,13 +541,13 @@ void Draw_Init (void)
zombie_skins[0][1] = loadtextureimage ("models/ai/zfull.mdl_1", 0, 0, qtrue, GU_LINEAR); zombie_skins[0][1] = loadtextureimage ("models/ai/zfull.mdl_1", 0, 0, qtrue, GU_LINEAR);
zombie_skins[1][0] = loadtextureimage ("models/ai/zfull.mdl_2", 0, 0, qtrue, GU_LINEAR); zombie_skins[1][0] = loadtextureimage ("models/ai/zfull.mdl_2", 0, 0, qtrue, GU_LINEAR);
zombie_skins[1][1] = loadtextureimage ("models/ai/zfull.mdl_3", 0, 0, qtrue, GU_LINEAR); zombie_skins[1][1] = loadtextureimage ("models/ai/zfull.mdl_3", 0, 0, qtrue, GU_LINEAR);
GL_MarkTextureAsPermanent(zombie_skins[0][1]);
GL_MarkTextureAsPermanent(zombie_skins[1][0]);
GL_MarkTextureAsPermanent(zombie_skins[1][1]);
#else #else
zombie_skins[0][1] = zombie_skins[0][0];
zombie_skins[0][1] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR); zombie_skins[1][0] = zombie_skins[0][0];
zombie_skins[1][0] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR); zombie_skins[1][1] = zombie_skins[0][0];
zombie_skins[1][1] = loadtextureimage ("models/ai/zfull.mdl_0", 0, 0, qtrue, GU_LINEAR);
#endif // SLIM #endif // SLIM
Clear_LoadingFill (); Clear_LoadingFill ();
@ -760,6 +740,53 @@ void Draw_AlphaPic (int x, int y, qpic_t *pic, float alpha)
} }
} }
/*
=============
Draw_AlphaPicIndex
=============
*/
void Draw_PicIndex (int x, int y, int width, int height, int texture_index)
{
GL_Bind(texture_index);
struct vertex
{
short u, v;
short x, y, z;
};
vertex* const vertices = static_cast<vertex*>(sceGuGetMemory(sizeof(vertex) * 2));
vertices[0].u = 0;
vertices[0].v = 0;
vertices[0].x = x;
vertices[0].y = y;
vertices[0].z = 0;
const gltexture_t& glt = gltextures[texture_index];
if (gltextures[texture_index].islmp)
{
vertices[1].u = glt.original_width;
vertices[1].v = glt.original_height;
}
else
{
vertices[1].u = glt.width;
vertices[1].v = glt.height;
}
vertices[1].x = x + width;
vertices[1].y = y + height;
vertices[1].z = 0;
sceGuColor(0xffffffff);
sceGuDrawArray(
GU_SPRITES,
GU_TEXTURE_16BIT | GU_VERTEX_16BIT | GU_TRANSFORM_2D,
2, 0, vertices);
}
/* /*
============= =============
@ -2464,81 +2491,87 @@ GL_UnloadTexture
*/ */
void GL_UnloadTexture(int texture_index) void GL_UnloadTexture(int texture_index)
{ {
if (gltextures_used[texture_index] == false) return;
if (gltextures_is_permanent[texture_index]) return;
if (gltextures_used[texture_index] == true) gltexture_t& texture = gltextures[texture_index];
{
gltexture_t& texture = gltextures[texture_index];
Con_DPrintf("Unloading: %s,%d\n",texture.identifier, texture.bpp); // Con_Printf("Unloading: %s,%d\n",texture.identifier, texture.bpp);
// Source. // Source.
strcpy(texture.identifier,""); strcpy(texture.identifier,"");
texture.original_width = 0; texture.original_width = 0;
texture.original_height = 0; texture.original_height = 0;
texture.stretch_to_power_of_two = qfalse; texture.stretch_to_power_of_two = qfalse;
// Fill in the texture description. // Fill in the texture description.
texture.format = GU_PSM_T8; texture.format = GU_PSM_T8;
texture.bpp = 0; texture.bpp = 0;
texture.filter = GU_LINEAR; texture.filter = GU_LINEAR;
texture.width = 0; texture.width = 0;
texture.height = 0; texture.height = 0;
texture.mipmaps = 0; texture.mipmaps = 0;
texture.swizzle = 0; texture.swizzle = 0;
#ifdef STATIC_PAL #ifdef STATIC_PAL
memset(texture.palette, 0, sizeof(texture.palette)); memset(texture.palette, 0, sizeof(texture.palette));
#else #else
if (texture.palette != NULL) if (texture.palette != NULL)
{ {
free(texture.palette); free(texture.palette);
texture.palette = NULL; texture.palette = NULL;
} }
if (texture.palette_2 != NULL) if (texture.palette_2 != NULL)
{ {
free(texture.palette_2); free(texture.palette_2);
texture.palette_2 = NULL; texture.palette_2 = NULL;
} }
#endif #endif
texture.palette_active = qfalse; texture.palette_active = qfalse;
if (texture.palette != NULL) if (texture.palette != NULL)
{ {
free(texture.palette); free(texture.palette);
texture.palette = NULL; texture.palette = NULL;
} }
if (texture.palette_2 != NULL) if (texture.palette_2 != NULL)
{ {
free(texture.palette_2); free(texture.palette_2);
texture.palette_2 = NULL; texture.palette_2 = NULL;
} }
// Buffers. // Buffers.
if (texture.ram != NULL) if (texture.ram != NULL)
{ {
free(texture.ram); free(texture.ram);
texture.ram = NULL; texture.ram = NULL;
} }
if (texture.vram != NULL) if (texture.vram != NULL)
{ {
vfree(texture.vram); vfree(texture.vram);
texture.vram = NULL; texture.vram = NULL;
}
} }
gltextures_used[texture_index] = false; gltextures_used[texture_index] = false;
numgltextures--; numgltextures--;
}
void GL_UnloadAllTextures() {
for (int i = 0; i < MAX_GLTEXTURES; i++) {
GL_UnloadTexture(i);
}
} }
/* /*
================ For marking textures as something that should never be cleaned up, like fonts, zombie, etc.
GL_LoadTexture There should never be need to change anything back from permanent.
================
*/ */
int GL_LoadTexture (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level) void GL_MarkTextureAsPermanent(int texture_index) {
{ if (gltextures_used[texture_index] == false) {
int texture_index = -1; Sys_Error("Tried to mark an empty texture as permanent!\n");
}
tex_scale_down = r_tex_scale_down.value == qtrue; gltextures_is_permanent[texture_index] = true;
}
int GL_TextureForName(const char * identifier) {
// See if the texture is already present. // See if the texture is already present.
if (identifier[0]) if (identifier[0])
{ {
@ -2554,27 +2587,53 @@ int GL_LoadTexture (const char *identifier, int width, int height, const byte *d
} }
} }
} }
return -1;
}
int GL_GetTextureIndex() {
// Out of textures? // Out of textures?
if (numgltextures == MAX_GLTEXTURES) if (numgltextures == MAX_GLTEXTURES)
{ {
Sys_Error("Out of OpenGL textures"); Sys_Error("Out of gl textures");
} }
// Use the next available texture.
numgltextures++; numgltextures++;
texture_index = numgltextures; int texture_index = -1;
for (int i = 0; i < MAX_GLTEXTURES; ++i) for (int i = 0; i < MAX_GLTEXTURES; ++i)
{ {
if (gltextures_used[i] == false) { if (gltextures_used[i] == false)
{
texture_index = i; texture_index = i;
break; break;
} }
} }
gltexture_t& texture = gltextures[texture_index];
if (texture_index < 0) {
Sys_Error("Could not find a free gl texture!\n");
}
gltextures_used[texture_index] = true; gltextures_used[texture_index] = true;
return texture_index;
}
/*
================
GL_LoadTexture
================
*/
int GL_LoadTexture (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level)
{
int texture_index = GL_TextureForName(identifier);
if (texture_index >= 0) return texture_index;
tex_scale_down = r_tex_scale_down.value == qtrue;
texture_index = GL_GetTextureIndex();
gltexture_t& texture = gltextures[texture_index];
// Fill in the source data. // Fill in the source data.
strcpy(texture.identifier, identifier); strcpy(texture.identifier, identifier);
texture.original_width = width; texture.original_width = width;
@ -2660,46 +2719,14 @@ GL_LoadPalTex
*/ */
int GL_LoadPalTex (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level, byte *palette, int paltype) int GL_LoadPalTex (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level, byte *palette, int paltype)
{ {
int texture_index = GL_TextureForName(identifier);
int texture_index = -1; if (texture_index >= 0) return texture_index;
tex_scale_down = r_tex_scale_down.value == qtrue; tex_scale_down = r_tex_scale_down.value == qtrue;
// See if the texture is already present.
if (identifier[0]) texture_index = GL_GetTextureIndex();
{
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == true)
{
const gltexture_t& texture = gltextures[i];
if (!strcmp (identifier, texture.identifier))
{
return i;
}
}
}
}
// Out of textures?
if (numgltextures == MAX_GLTEXTURES)
{
Sys_Error("Out of OpenGL textures");
}
// Use the next available texture.
numgltextures++;
texture_index = numgltextures;
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == false)
{
texture_index = i;
break;
}
}
gltexture_t& texture = gltextures[texture_index]; gltexture_t& texture = gltextures[texture_index];
gltextures_used[texture_index] = true;
// Fill in the source data. // Fill in the source data.
strcpy(texture.identifier, identifier); strcpy(texture.identifier, identifier);
@ -2845,51 +2872,14 @@ GL_LoadTextureLM
int GL_LoadTextureLM (const char *identifier, int width, int height, const byte *data, int bpp, int filter, qboolean update, int forcopy) int GL_LoadTextureLM (const char *identifier, int width, int height, const byte *data, int bpp, int filter, qboolean update, int forcopy)
{ {
tex_scale_down = r_tex_scale_down.value == qtrue; tex_scale_down = r_tex_scale_down.value == qtrue;
int texture_index = -1; int texture_index = GL_TextureForName(identifier);
// See if the texture is already present. if (texture_index >= 0 && update == qfalse) {
if (identifier[0]) return texture_index;
{
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == true)
{
const gltexture_t& texture = gltextures[i];
if (!strcmp (identifier, texture.identifier))
{
if (update == qfalse)
{
return i;
}
else
{
texture_index = i;
break;
}
}
}
}
} }
if (update == qfalse || texture_index == -1) if (update == qfalse || texture_index == -1)
{ {
// Out of textures? texture_index = GL_GetTextureIndex();
if (numgltextures == MAX_GLTEXTURES)
{
Sys_Error("Out of OpenGL textures");
}
// Use the next available texture.
numgltextures++;
texture_index = numgltextures;
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == false)
{
texture_index = i;
break;
}
}
gltexture_t& texture = gltextures[texture_index]; gltexture_t& texture = gltextures[texture_index];
gltextures_used[texture_index] = true; gltextures_used[texture_index] = true;
@ -3073,47 +3063,14 @@ GL_LoadImages
int total_overbudget_texturemem; int total_overbudget_texturemem;
int GL_LoadImages (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level, int bpp) int GL_LoadImages (const char *identifier, int width, int height, const byte *data, qboolean stretch_to_power_of_two, int filter, int mipmap_level, int bpp)
{ {
int texture_index = -1; int texture_index = GL_TextureForName(identifier);
if (texture_index >= 0) return texture_index;
tex_scale_down = r_tex_scale_down.value == qtrue; tex_scale_down = r_tex_scale_down.value == qtrue;
// See if the texture is already present. texture_index = GL_GetTextureIndex();
if (identifier[0])
{
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == true)
{
const gltexture_t& texture = gltextures[i];
if (!strcmp (identifier, texture.identifier))
{
return i;
}
}
}
}
// Out of textures?
if (numgltextures == MAX_GLTEXTURES)
{ Sys_Error("Out of OpenGL textures");
}
// Use the next available texture.
numgltextures++;
texture_index = numgltextures;
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == false)
{
texture_index = i;
break;
}
}
gltexture_t& texture = gltextures[texture_index]; gltexture_t& texture = gltextures[texture_index];
gltextures_used[texture_index] = true;
// Fill in the source data. // Fill in the source data.
strcpy(texture.identifier, identifier); strcpy(texture.identifier, identifier);
texture.original_width = width; texture.original_width = width;
@ -3263,6 +3220,7 @@ int GL_LoadImages (const char *identifier, int width, int height, const byte *da
//FIXME: this isn't completely clearing out the normal ram stuff :s //FIXME: this isn't completely clearing out the normal ram stuff :s
if (texture.vram && texture.ram) if (texture.vram && texture.ram)
{ {
Con_Printf("Put %s into VRAM (%dkB)\n", identifier, buffer_size/1024);
free(texture.ram); free(texture.ram);
texture.ram = NULL; texture.ram = NULL;
} else { } else {
@ -3356,42 +3314,11 @@ void GL_Upload4(int texture_index, const byte *data, int width, int height)
int GL_LoadTexture4(const char *identifier, unsigned int width, unsigned int height, const byte *data, int filter, qboolean swizzled) int GL_LoadTexture4(const char *identifier, unsigned int width, unsigned int height, const byte *data, int filter, qboolean swizzled)
{ {
int texture_index = -1; int texture_index = GL_TextureForName(identifier);
if (texture_index >= 0) return texture_index;
if (identifier[0])
{
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == true)
{
const gltexture_t& texture = gltextures[i];
if (!strcmp(identifier, texture.identifier))
{
return i;
}
}
}
}
// Out of textures? texture_index = GL_GetTextureIndex();
if (numgltextures == MAX_GLTEXTURES)
{
Sys_Error("Out of OpenGL textures");
}
// Use the next available texture.
numgltextures++;
texture_index = numgltextures;
for (int i = 0; i < MAX_GLTEXTURES; ++i)
{
if (gltextures_used[i] == false) {
texture_index = i;
break;
}
}
gltexture_t& texture = gltextures[texture_index]; gltexture_t& texture = gltextures[texture_index];
gltextures_used[texture_index] = true;
// Fill in the source data. // Fill in the source data.
strcpy(texture.identifier, identifier); strcpy(texture.identifier, identifier);

View file

@ -31,8 +31,6 @@ extern"C"
#include <pspgum.h> #include <pspgum.h>
#include <list> #include <list>
extern std::list<int> mapTextureNameList;
extern model_t *loadmodel; extern model_t *loadmodel;
extern vec3_t lightcolor; // LordHavoc: .lit support extern vec3_t lightcolor; // LordHavoc: .lit support
@ -157,9 +155,7 @@ qboolean Mod_LoadHLModel (model_t *mod, void *buffer)
for(i = 0; i < header->numtextures; i++) for(i = 0; i < header->numtextures; i++)
{ {
tex[i].i = GL_LoadPalTex (tex[i].name, tex[i].w, tex[i].h, (byte *) header + tex[i].i, qtrue, GU_LINEAR, 0, (byte *) header + tex[i].w * tex[i].h + tex[i].i, PAL_RGB); tex[i].i = GL_LoadPalTex (tex[i].name, tex[i].w, tex[i].h, (byte *) header + tex[i].i, qtrue, GU_LINEAR, 0, (byte *) header + tex[i].w * tex[i].h + tex[i].i, PAL_RGB);
mapTextureNameList.push_back(tex[i].i); // for unload textures
} }
// //
// move the complete, relocatable alias model to the cache // move the complete, relocatable alias model to the cache

View file

@ -55,7 +55,6 @@ const float piconst = GU_PI / 180.0f;
entity_t r_worldentity; entity_t r_worldentity;
entity_t *currententity; entity_t *currententity;
qboolean r_cache_thrash; // compatability
qboolean envmap; qboolean envmap;
qboolean mirror; qboolean mirror;
@ -3708,8 +3707,6 @@ void R_RenderScene (void)
V_SetContentsColor (r_viewleaf->contents); V_SetContentsColor (r_viewleaf->contents);
V_CalcBlend (); V_CalcBlend ();
r_cache_thrash = qfalse;
c_brush_polys = 0; c_brush_polys = 0;
c_alias_polys = 0; c_alias_polys = 0;
c_md3_polys = 0; c_md3_polys = 0;

View file

@ -45,12 +45,19 @@ void R_InitOtherTextures (void)
{ {
//static decals //static decals
decal_blood1 = loadtextureimage ("textures/decals/blood_splat01", 0, 0, qfalse, GU_LINEAR); decal_blood1 = loadtextureimage ("textures/decals/blood_splat01", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_blood1);
decal_blood2 = loadtextureimage ("textures/decals/blood_splat02", 0, 0, qfalse, GU_LINEAR); decal_blood2 = loadtextureimage ("textures/decals/blood_splat02", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_blood2);
decal_blood3 = loadtextureimage ("textures/decals/blood_splat03", 0, 0, qfalse, GU_LINEAR); decal_blood3 = loadtextureimage ("textures/decals/blood_splat03", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_blood3);
decal_q3blood = loadtextureimage ("textures/decals/blood_stain", 0, 0, qfalse, GU_LINEAR); decal_q3blood = loadtextureimage ("textures/decals/blood_stain", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_blood1);
decal_burn = loadtextureimage ("textures/decals/explo_burn01", 0, 0, qfalse, GU_LINEAR); decal_burn = loadtextureimage ("textures/decals/explo_burn01", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_burn);
decal_mark = loadtextureimage ("textures/decals/particle_burn01", 0, 0, qfalse, GU_LINEAR); decal_mark = loadtextureimage ("textures/decals/particle_burn01", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_mark);
decal_glow = loadtextureimage ("textures/decals/glow2", 0, 0, qfalse, GU_LINEAR); decal_glow = loadtextureimage ("textures/decals/glow2", 0, 0, qfalse, GU_LINEAR);
GL_MarkTextureAsPermanent(decal_glow);
} }
/* /*
@ -350,7 +357,7 @@ void R_Init (void)
Cvar_RegisterVariable (&r_runqmbparticles); Cvar_RegisterVariable (&r_runqmbparticles);
R_InitParticles (); R_InitParticles ();
R_InitParticleTexture (); // R_InitParticleTexture ();
R_InitOtherTextures (); R_InitOtherTextures ();
R_InitDecals (); R_InitDecals ();
Sky_Init (); //johnfitz Sky_Init (); //johnfitz
@ -451,8 +458,3 @@ void R_TimeRefresh_f (void)
GL_EndRendering (); GL_EndRendering ();
} }
void D_FlushCaches (void)
{
}

View file

@ -36,10 +36,6 @@ extern "C"
#include "video_hardware_hlmdl.h" #include "video_hardware_hlmdl.h"
#include "video_hardware_images.h" #include "video_hardware_images.h"
#include <list>
std::list<int> mapTextureNameList;
int LIGHTMAP_BYTES; int LIGHTMAP_BYTES;
model_t *loadmodel; model_t *loadmodel;
@ -227,32 +223,18 @@ void Mod_ClearAll (void)
ent_file = NULL; //~~~~ ent_file = NULL; //~~~~
// maybe we should check if it is new map or not GL_UnloadAllTextures();
// (so we dont unload textures unnecessary)
while (mapTextureNameList.size() > 0)
{
texture_index = mapTextureNameList.front();
mapTextureNameList.pop_front();
GL_UnloadTexture(texture_index);
}
solidskytexture = -1; solidskytexture = -1;
alphaskytexture = -1; alphaskytexture = -1;
//purge old sky textures //purge old sky textures
for (i=0; i<6; i++) for (i=0; i<6; i++)
{
if (skyimage[i] && skyimage[i] != solidskytexture)
GL_UnloadTexture(skyimage[i]);
skyimage[i] = NULL; skyimage[i] = NULL;
}
//purge old lightmaps //purge old lightmaps
for (i=0; i<MAX_LIGHTMAPS; i++) for (i=0; i<MAX_LIGHTMAPS; i++)
{
if (lightmap_index[i] && lightmap_index[i] != 0)
GL_UnloadTexture(lightmap_index[i]);
lightmap_index[i] = NULL; lightmap_index[i] = NULL;
}
} }
/* /*
@ -474,7 +456,6 @@ int GL_LoadTexturePixels (byte *data, char *identifier, int width, int height, i
(loadmodel->bspversion == HL_BSPVERSION && (name)[0] == '!') || \ (loadmodel->bspversion == HL_BSPVERSION && (name)[0] == '!') || \
(loadmodel->bspversion == NZP_BSPVERSION && (name)[0] == '!')) (loadmodel->bspversion == NZP_BSPVERSION && (name)[0] == '!'))
extern int detail_texture;
extern int nonetexture; extern int nonetexture;
/* /*
================= =================
@ -553,8 +534,6 @@ void Mod_LoadTextures (lump_t *l)
if (loadmodel->bspversion != HL_BSPVERSION && loadmodel->bspversion != NZP_BSPVERSION && ISSKYTEX(tx->name)) if (loadmodel->bspversion != HL_BSPVERSION && loadmodel->bspversion != NZP_BSPVERSION && ISSKYTEX(tx->name))
{ {
R_InitSky (tx_pixels); R_InitSky (tx_pixels);
mapTextureNameList.push_back(solidskytexture);
mapTextureNameList.push_back(alphaskytexture);
} }
else else
{ {
@ -582,7 +561,6 @@ void Mod_LoadTextures (lump_t *l)
com_netpath[0] = 0; com_netpath[0] = 0;
tx->gl_texturenum = index; tx->gl_texturenum = index;
tx->fullbright = -1; tx->fullbright = -1;
mapTextureNameList.push_back(tx->gl_texturenum);
tx->dt_texturenum = 0; tx->dt_texturenum = 0;
// if(tx_pixels = WAD3_LoadTexture(mt)) // if(tx_pixels = WAD3_LoadTexture(mt))
@ -612,7 +590,6 @@ void Mod_LoadTextures (lump_t *l)
h = *((int*)(f + 8)); h = *((int*)(f + 8));
tx->gl_texturenum = GL_LoadTexture4(mt->name, w, h, (byte*)(f + 16), GU_LINEAR, qfalse); tx->gl_texturenum = GL_LoadTexture4(mt->name, w, h, (byte*)(f + 16), GU_LINEAR, qfalse);
mapTextureNameList.push_back(tx->gl_texturenum);
} }
} }
@ -625,7 +602,6 @@ void Mod_LoadTextures (lump_t *l)
{ {
tx->gl_texturenum = GL_LoadTexture (mt->name, tx->width, tx->height, (byte *)(tx_pixels), qtrue, GU_LINEAR, level); tx->gl_texturenum = GL_LoadTexture (mt->name, tx->width, tx->height, (byte *)(tx_pixels), qtrue, GU_LINEAR, level);
} }
mapTextureNameList.push_back(tx->gl_texturenum);
/* /*
//Crow_bar mult detail textures //Crow_bar mult detail textures
sprintf (detname, "gfx/detail/%s", mt->name); sprintf (detname, "gfx/detail/%s", mt->name);
@ -645,7 +621,6 @@ void Mod_LoadTextures (lump_t *l)
// load the fullbright pixels version of the texture // load the fullbright pixels version of the texture
tx->fullbright = tx->fullbright =
GL_LoadTexture (fbr_mask_name, tx->width, tx->height, (byte *)(tx_pixels), qtrue, GU_LINEAR, level); GL_LoadTexture (fbr_mask_name, tx->width, tx->height, (byte *)(tx_pixels), qtrue, GU_LINEAR, level);
mapTextureNameList.push_back(tx->fullbright);
} }
else else
tx->fullbright = -1; // because 0 is a potentially valid texture number tx->fullbright = -1; // because 0 is a potentially valid texture number
@ -2042,7 +2017,7 @@ void Mod_FloodFillSkin( byte *skin, int skinwidth, int skinheight )
qboolean model_is_gun(char name[MAX_QPATH]) qboolean model_is_gun(char name[MAX_QPATH])
{ {
char* wep_path = static_cast<char*>(malloc(sizeof(char)*15)); char wep_path[15];
for (int i = 0; i < 15; i++) { for (int i = 0; i < 15; i++) {
wep_path[i] = name[i]; wep_path[i] = name[i];
@ -2111,7 +2086,6 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
if (model_is_zombie(loadmodel->name) == qtrue) { if (model_is_zombie(loadmodel->name) == qtrue) {
Mod_FloodFillSkin(skin, pheader->skinwidth, pheader->skinheight); Mod_FloodFillSkin(skin, pheader->skinwidth, pheader->skinheight);
// force-fill 4 skin slots // force-fill 4 skin slots
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
switch(i) { switch(i) {
@ -2171,14 +2145,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_0", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_0", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_revive && i == 0) { } else if (!has_perk_revive && i == 0) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 1 && has_perk_juggernog) { if (i == 1 && has_perk_juggernog) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2186,14 +2158,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_1", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_1", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_juggernog && i == 1) { } else if (!has_perk_juggernog && i == 1) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 2 && has_perk_speedcola) { if (i == 2 && has_perk_speedcola) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2201,14 +2171,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_2", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_2", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_speedcola && i == 2) { } else if (!has_perk_speedcola && i == 2) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 3 && has_perk_doubletap) { if (i == 3 && has_perk_doubletap) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2216,14 +2184,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_3", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_3", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_doubletap && i == 3) { } else if (!has_perk_doubletap && i == 3) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 4 && has_perk_staminup) { if (i == 4 && has_perk_staminup) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2231,14 +2197,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_4", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_4", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_staminup && i == 4) { } else if (!has_perk_staminup && i == 4) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 5 && has_perk_flopper) { if (i == 5 && has_perk_flopper) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2246,14 +2210,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_5", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_5", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_flopper && i == 5) { } else if (!has_perk_flopper && i == 5) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 6 && has_perk_deadshot) { if (i == 6 && has_perk_deadshot) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2261,14 +2223,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_6", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_6", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_deadshot && i == 6) { } else if (!has_perk_deadshot && i == 6) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
if (i == 7 && has_perk_mulekick) { if (i == 7 && has_perk_mulekick) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
@ -2276,14 +2236,12 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_7", 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i][3] = loadtextureimage("models/machines/v_perk.mdl_7", 0, 0, qtrue, GU_LINEAR);
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} else if (!has_perk_mulekick && i == 7) { } else if (!has_perk_mulekick && i == 7) {
pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][0] =
pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][1] =
pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][2] =
pheader->gl_texturenum[i][3] = zombie_skins[0][0]; pheader->gl_texturenum[i][3] = zombie_skins[0][0];
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
} }
} }
@ -2338,9 +2296,6 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
pheader->gl_texturenum[i][3] = loadrgbafrompal(name, pheader->skinwidth, pheader->skinheight, (byte*)(pskintype+1)); pheader->gl_texturenum[i][3] = loadrgbafrompal(name, pheader->skinwidth, pheader->skinheight, (byte*)(pskintype+1));
} }
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
/* Crow_bar Memory Leak Fixed One Work not used */
mapTextureNameList.push_back(pheader->gl_texturenum[i][i]);
/* Crow_bar Memory Leak Fixed */
} }
else else
{ {
@ -2375,9 +2330,6 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
} }
} }
pskintype = (daliasskintype_t *)((byte *)(pskintype) + s); pskintype = (daliasskintype_t *)((byte *)(pskintype) + s);
/* Crow_bar Memory Leak Fixed*/
mapTextureNameList.push_back(pheader->gl_texturenum[i][j&3]);
/* Crow_bar Memory Leak Fixed*/
} }
k = j; k = j;
for (/* */; j < 4; j++) for (/* */; j < 4; j++)
@ -2823,9 +2775,6 @@ void Mod_LoadQ2AliasModel (model_t *mod, void *buffer)
{ {
pheader->gl_texturenum[i] = loadtextureimage (pinskins, 0, 0, qtrue, GU_LINEAR); pheader->gl_texturenum[i] = loadtextureimage (pinskins, 0, 0, qtrue, GU_LINEAR);
pinskins += MD2MAX_SKINNAME; pinskins += MD2MAX_SKINNAME;
/* Crow_bar Memory Leak Fixed */
mapTextureNameList.push_back(pheader->gl_texturenum[i]);
/* Crow_bar Memory Leak Fixed */
} }
} }
@ -3090,8 +3039,6 @@ void Mod_LoadQ3ModelTexture (char *identifier, int flags, int *gl_texnum)
Q_snprintfz (loadpath, sizeof(loadpath), "maps/%s", identifier); Q_snprintfz (loadpath, sizeof(loadpath), "maps/%s", identifier);
*gl_texnum = loadtextureimage (loadpath, 0, 0, qtrue, GU_LINEAR); *gl_texnum = loadtextureimage (loadpath, 0, 0, qtrue, GU_LINEAR);
} }
mapTextureNameList.push_back(*gl_texnum);
} }
//============================================================================== //==============================================================================
@ -3652,10 +3599,6 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum,
Sys_Error("Mod_LoadSpriteFrame: Non sprite type"); Sys_Error("Mod_LoadSpriteFrame: Non sprite type");
} }
/* Crow_bar Memory Leak Fixed */
mapTextureNameList.push_back(pspriteframe->gl_texturenum);
/* Crow_bar Memory Leak Fixed */
return (void *)((byte *)pinframe + sizeof (dspriteframe_t) + size); return (void *)((byte *)pinframe + sizeof (dspriteframe_t) + size);
} }
@ -3972,7 +3915,6 @@ qboolean Mod_LoadQ2SpriteModel (model_t *mod, void *buffer)
frame = psprite->frames[i].frameptr = static_cast<mspriteframe_t*>(Hunk_AllocName(sizeof(mspriteframe_t), loadname)); frame = psprite->frames[i].frameptr = static_cast<mspriteframe_t*>(Hunk_AllocName(sizeof(mspriteframe_t), loadname));
frame->gl_texturenum = loadtextureimage (pframetype->name, 0, 0, qtrue, GU_LINEAR); frame->gl_texturenum = loadtextureimage (pframetype->name, 0, 0, qtrue, GU_LINEAR);
mapTextureNameList.push_back(frame->gl_texturenum);
frame->width = LittleLong(pframetype->width); frame->width = LittleLong(pframetype->width);
frame->height = LittleLong(pframetype->height); frame->height = LittleLong(pframetype->height);

View file

@ -111,7 +111,8 @@ qpic_t *hitmark;
/*qpic_t *ls_ndu; /*qpic_t *ls_ndu;
qpic_t *ls_warehouse; qpic_t *ls_warehouse;
qpic_t *ls_xmas;*/ qpic_t *ls_xmas;*/
qpic_t *lscreen; // qpic_t *lscreen;
int lscreen_index;
int scr_fullupdate; int scr_fullupdate;
@ -862,7 +863,7 @@ char *lodinglinetext;
qpic_t *awoo; qpic_t *awoo;
char *ReturnLoadingtex (void) char *ReturnLoadingtex (void)
{ {
int StringNum = Random_Int(55); int StringNum = Random_Int(61);
switch(StringNum) switch(StringNum)
{ {
case 1: case 1:
@ -1027,10 +1028,31 @@ char *ReturnLoadingtex (void)
case 54: case 54:
return "Play some Custom Maps!"; return "Play some Custom Maps!";
break; break;
case 55:
return "Real OGs play on a PSP-1000!";
break;
case 56:
return "Adding this tip improved framerate by 39%!";
break;
case 57:
return "The NZ in NZP stands for New Zealand!";
break;
case 58:
return "The P in NZP stands for Professional!";
break;
case 59:
return "Many people have worked on this game!";
break;
case 60:
return "Remember to stay hydrated!";
break;
case 61:
return "cofe";
break;
} }
return "wut wut"; return "wut wut";
} }
qboolean load_screen_exists;
void SCR_DrawLoadScreen (void) void SCR_DrawLoadScreen (void)
{ {
@ -1041,24 +1063,16 @@ void SCR_DrawLoadScreen (void)
if (loadingScreen) { if (loadingScreen) {
if (!loadscreeninit) { if (!loadscreeninit) {
load_screen_exists = qfalse; char lpath[32];
char* lpath;
lpath = (char*)Z_Malloc(sizeof(char)*32);
strcpy(lpath, "gfx/lscreen/"); strcpy(lpath, "gfx/lscreen/");
strcat(lpath, loadname2); strcat(lpath, loadname2);
lscreen_index = loadtextureimage(lpath, 0, 0, qfalse, GU_LINEAR);
lscreen = Draw_CachePic(lpath);
awoo = Draw_CacheImg("gfx/menu/awoo"); awoo = Draw_CacheImg("gfx/menu/awoo");
if (lscreen != NULL)
load_screen_exists = qtrue;
loadscreeninit = qtrue; loadscreeninit = qtrue;
} }
if (load_screen_exists == qtrue) if (lscreen_index > 0)
Draw_Pic(scr_vrect.x, scr_vrect.y, lscreen); Draw_PicIndex(scr_vrect.x, scr_vrect.y, 480, 272, lscreen_index);
Draw_FillByColor(0, 0, 480, 24, GU_RGBA(0, 0, 0, 150)); Draw_FillByColor(0, 0, 480, 24, GU_RGBA(0, 0, 0, 150));
Draw_FillByColor(0, 248, 480, 24, GU_RGBA(0, 0, 0, 150)); Draw_FillByColor(0, 248, 480, 24, GU_RGBA(0, 0, 0, 150));

View file

@ -179,8 +179,6 @@ typedef struct
// //
// refresh // refresh
// //
extern int reinit_surfcache;
extern refdef_t r_refdef; extern refdef_t r_refdef;
extern vec3_t r_origin, vpn, vright, vup; extern vec3_t r_origin, vpn, vright, vup;
@ -226,16 +224,6 @@ void R_TeleportSplash (vec3_t org);
void R_PushDlights (void); void R_PushDlights (void);
//
// surface cache related
//
extern int reinit_surfcache; // if 1, surface cache is currently empty and
extern qboolean r_cache_thrash; // set if thrashing the surface cache
int D_SurfaceCacheForRes (int width, int height);
void D_FlushCaches (void);
void D_DeleteSurfaceCache (void);
void D_InitCaches (void *buffer, int size); void D_InitCaches (void *buffer, int size);
void R_SetVrect (vrect_t *pvrect, vrect_t *pvrectin, int lineadj); void R_SetVrect (vrect_t *pvrect, vrect_t *pvrectin, int lineadj);