mirror of
https://github.com/nzp-team/dquakeplus.git
synced 2024-11-29 15:11:54 +00:00
Considerably reduce GL_Bind
This commit is contained in:
parent
fc8790e1d0
commit
9827c6667b
2 changed files with 22 additions and 58 deletions
|
@ -109,6 +109,8 @@ void VID_InitPaleteLM()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qboolean last_palette_wasnt_tx;
|
||||||
|
|
||||||
void VID_SetPaletteLM()
|
void VID_SetPaletteLM()
|
||||||
{
|
{
|
||||||
// Upload the palette.
|
// Upload the palette.
|
||||||
|
@ -116,6 +118,7 @@ void VID_SetPaletteLM()
|
||||||
sceKernelDcacheWritebackRange(d_8to24tableLM, sizeof(d_8to24tableLM));
|
sceKernelDcacheWritebackRange(d_8to24tableLM, sizeof(d_8to24tableLM));
|
||||||
sceGuClutLoad(palette_size / 8, d_8to24tableLM);
|
sceGuClutLoad(palette_size / 8, d_8to24tableLM);
|
||||||
reloaded_pallete = 1;
|
reloaded_pallete = 1;
|
||||||
|
last_palette_wasnt_tx = qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VID_SetPaletteTX()
|
void VID_SetPaletteTX()
|
||||||
|
@ -125,12 +128,14 @@ void VID_SetPaletteTX()
|
||||||
sceKernelDcacheWritebackRange(d_8to24table, sizeof(d_8to24table));
|
sceKernelDcacheWritebackRange(d_8to24table, sizeof(d_8to24table));
|
||||||
sceGuClutLoad(palette_size / 8, d_8to24table);
|
sceGuClutLoad(palette_size / 8, d_8to24table);
|
||||||
reloaded_pallete = 1;
|
reloaded_pallete = 1;
|
||||||
|
last_palette_wasnt_tx = qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VID_SetPalette4(unsigned char* clut4pal) {
|
void VID_SetPalette4(unsigned char* clut4pal) {
|
||||||
sceGuClutMode(GU_PSM_8888, 0, 0xFF, 0);
|
sceGuClutMode(GU_PSM_8888, 0, 0xFF, 0);
|
||||||
sceKernelDcacheWritebackRange(clut4pal, sizeof(clut4pal));
|
sceKernelDcacheWritebackRange(clut4pal, sizeof(clut4pal));
|
||||||
sceGuClutLoad(2, clut4pal);
|
sceGuClutLoad(2, clut4pal);
|
||||||
|
last_palette_wasnt_tx = qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VID_SetPalette(unsigned char* palette)
|
void VID_SetPalette(unsigned char* palette)
|
||||||
|
@ -153,6 +158,7 @@ void VID_SetPalette(unsigned char* palette)
|
||||||
sceKernelDcacheWritebackRange(d_8to24table, sizeof(d_8to24table));
|
sceKernelDcacheWritebackRange(d_8to24table, sizeof(d_8to24table));
|
||||||
sceGuClutLoad(palette_size / 8, d_8to24table);
|
sceGuClutLoad(palette_size / 8, d_8to24table);
|
||||||
reloaded_pallete = 1;
|
reloaded_pallete = 1;
|
||||||
|
last_palette_wasnt_tx = qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VID_ShiftPalette(unsigned char* palette)
|
void VID_ShiftPalette(unsigned char* palette)
|
||||||
|
|
|
@ -189,6 +189,7 @@ void GL_Copy(int texture_index, int dx, int dy, int sx, int sy, int w, int h)
|
||||||
|
|
||||||
|
|
||||||
void VID_SetPaletteTX();
|
void VID_SetPaletteTX();
|
||||||
|
extern qboolean last_palette_wasnt_tx;
|
||||||
void GL_Bind (int texture_index)
|
void GL_Bind (int texture_index)
|
||||||
{
|
{
|
||||||
// Binding the currently bound texture?
|
// Binding the currently bound texture?
|
||||||
|
@ -204,71 +205,28 @@ void GL_Bind (int texture_index)
|
||||||
// Which texture is it?
|
// Which texture is it?
|
||||||
const gltexture_t& texture = gltextures[texture_index];
|
const gltexture_t& texture = gltextures[texture_index];
|
||||||
|
|
||||||
|
// Set the palette (for CLUT4)
|
||||||
if (texture.format == GU_PSM_T4) {
|
if (texture.format == GU_PSM_T4) {
|
||||||
VID_SetPalette4(texture.palette);
|
VID_SetPalette4(texture.palette);
|
||||||
vid_palmode = GU_PSM_T4;
|
vid_palmode = GU_PSM_T4;
|
||||||
|
} else {
|
||||||
|
// HACK HACK HACK: avoid setting this all the time
|
||||||
|
if (last_palette_wasnt_tx == qtrue)
|
||||||
|
VID_SetPaletteTX();
|
||||||
|
vid_palmode = GU_PSM_T8;
|
||||||
|
}
|
||||||
|
|
||||||
sceGuTexMode(texture.format, 0, 0, GU_TRUE);
|
sceGuTexMode(texture.format, texture.mipmaps , 0, GU_TRUE);
|
||||||
|
|
||||||
|
// Set the Texture filter.
|
||||||
if (r_retro.value)
|
if (r_retro.value)
|
||||||
sceGuTexFilter(GU_NEAREST, GU_NEAREST);
|
sceGuTexFilter(GU_NEAREST, GU_NEAREST);
|
||||||
else
|
else
|
||||||
sceGuTexFilter(texture.filter, texture.filter);
|
sceGuTexFilter(texture.filter, texture.filter);
|
||||||
|
|
||||||
const void* const texture_memory = texture.vram ? texture.vram : texture.ram;
|
|
||||||
sceGuTexImage(0, texture.width, texture.height, texture.width, texture_memory);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if(texture.palette_active == qtrue)
|
|
||||||
{
|
|
||||||
// Used for wad3 textures with their own palette
|
|
||||||
// Upload the palette.
|
|
||||||
sceGuClutMode(GU_PSM_8888, 0, 255, 0);
|
|
||||||
sceKernelDcacheWritebackRange(texture.palette_2, 256);
|
|
||||||
sceGuClutLoad(256 /8 , texture.palette_2);
|
|
||||||
reloaded_pallete = 0;
|
|
||||||
} else {
|
|
||||||
// Used for wad2 textures
|
|
||||||
VID_SetPaletteTX();
|
|
||||||
vid_palmode = GU_PSM_T8;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the texture mode.
|
|
||||||
sceGuTexMode(texture.format, texture.mipmaps , 0, texture.swizzle);
|
|
||||||
|
|
||||||
if (r_retro.value) {
|
|
||||||
sceGuTexFilter(GU_NEAREST, GU_NEAREST);
|
|
||||||
} else {
|
|
||||||
if (texture.mipmaps > 0 && r_mipmaps.value > 0) {
|
|
||||||
//Con_Printf("asd\n");
|
|
||||||
float slope = 0.4f;
|
|
||||||
sceGuTexSlope(slope); // the near from 0 slope is the lower (=best detailed) mipmap it uses
|
|
||||||
sceGuTexFilter(GU_LINEAR_MIPMAP_LINEAR, GU_LINEAR_MIPMAP_LINEAR);
|
|
||||||
sceGuTexLevelMode(int(r_mipmaps_func.value), r_mipmaps_bias.value);
|
|
||||||
} else {
|
|
||||||
sceGuTexFilter(texture.filter, texture.filter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the texture image.
|
// Set the texture image.
|
||||||
const void* const texture_memory = texture.vram ? texture.vram : texture.ram;
|
const void* const texture_memory = texture.vram ? texture.vram : texture.ram;
|
||||||
sceGuTexImage(0, texture.width, texture.height, texture.width, texture_memory);
|
sceGuTexImage(0, texture.width, texture.height, texture.width, texture_memory);
|
||||||
|
|
||||||
if (texture.mipmaps > 0 && r_mipmaps.value > 0) {
|
|
||||||
int size = (texture.width * texture.height);
|
|
||||||
int offset = size;
|
|
||||||
int div = 2;
|
|
||||||
|
|
||||||
for (int i = 1; i <= texture.mipmaps; i++) {
|
|
||||||
void* const texture_memory2 = ((byte*)texture_memory) + offset;
|
|
||||||
sceGuTexImage(i, texture.width / div, texture.height / div, texture.width / div, texture_memory2);
|
|
||||||
offset += size / (div*div);
|
|
||||||
div *= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GL_BindLM (int texture_index)
|
void GL_BindLM (int texture_index)
|
||||||
|
|
Loading…
Reference in a new issue