Minorly optimise palette calculation functions

This commit is contained in:
UnknownShadow200 2025-06-06 19:31:54 +10:00
parent 4405515c73
commit 148d2debcb
65 changed files with 107 additions and 101 deletions

View File

@ -61,65 +61,65 @@
<file name="CCUBEPS1.EXE" type="data" source="../../ClassiCube-ps1.exe" />
<dir name="audio">
<file name="DCLOTH1.SND" type="data" source="audio/dig_cloth1.snd" />
<file name="DCLOTH2.SND" type="data" source="audio/dig_cloth2.snd" />
<file name="DCLOTH3.SND" type="data" source="audio/dig_cloth3.snd" />
<file name="DCLOTH4.SND" type="data" source="audio/dig_cloth4.snd" />
<file name="DGLASS1.SND" type="data" source="audio/dig_glass1.snd" />
<file name="DGLASS2.SND" type="data" source="audio/dig_glass2.snd" />
<file name="DGLASS3.SND" type="data" source="audio/dig_glass3.snd" />
<file name="DGRASS1.SND" type="data" source="audio/dig_grass1.snd" />
<file name="DGRASS2.SND" type="data" source="audio/dig_grass2.snd" />
<file name="DGRASS3.SND" type="data" source="audio/dig_grass3.snd" />
<file name="DGRASS4.SND" type="data" source="audio/dig_grass4.snd" />
<file name="DGRAVEL1.SND" type="data" source="audio/dig_gravel1.snd" />
<file name="DGRAVEL2.SND" type="data" source="audio/dig_gravel2.snd" />
<file name="DGRAVEL3.SND" type="data" source="audio/dig_gravel3.snd" />
<file name="DGRAVEL4.SND" type="data" source="audio/dig_gravel4.snd" />
<file name="DSAND1.SND" type="data" source="audio/dig_sand1.snd" />
<file name="DSAND2.SND" type="data" source="audio/dig_sand2.snd" />
<file name="DSAND3.SND" type="data" source="audio/dig_sand3.snd" />
<file name="DSAND4.SND" type="data" source="audio/dig_sand4.snd" />
<file name="DSNOW1.SND" type="data" source="audio/dig_snow1.snd" />
<file name="DSNOW2.SND" type="data" source="audio/dig_snow2.snd" />
<file name="DSNOW3.SND" type="data" source="audio/dig_snow3.snd" />
<file name="DSNOW4.SND" type="data" source="audio/dig_snow4.snd" />
<file name="DSTONE1.SND" type="data" source="audio/dig_stone1.snd" />
<file name="DSTONE2.SND" type="data" source="audio/dig_stone2.snd" />
<file name="DSTONE3.SND" type="data" source="audio/dig_stone3.snd" />
<file name="DSTONE4.SND" type="data" source="audio/dig_stone4.snd" />
<file name="DWOOD1.SND" type="data" source="audio/dig_wood1.snd" />
<file name="DWOOD2.SND" type="data" source="audio/dig_wood2.snd" />
<file name="DWOOD3.SND" type="data" source="audio/dig_wood3.snd" />
<file name="DWOOD4.SND" type="data" source="audio/dig_wood4.snd" />
<file name="SCLOTH1.SND" type="data" source="audio/step_cloth1.snd" />
<file name="SCLOTH2.SND" type="data" source="audio/step_cloth2.snd" />
<file name="SCLOTH3.SND" type="data" source="audio/step_cloth3.snd" />
<file name="SCLOTH4.SND" type="data" source="audio/step_cloth4.snd" />
<file name="SGRASS1.SND" type="data" source="audio/step_grass1.snd" />
<file name="SGRASS2.SND" type="data" source="audio/step_grass2.snd" />
<file name="SGRASS3.SND" type="data" source="audio/step_grass3.snd" />
<file name="SGRASS4.SND" type="data" source="audio/step_grass4.snd" />
<file name="SGRAVEL1.SND" type="data" source="audio/step_gravel1.snd" />
<file name="SGRAVEL2.SND" type="data" source="audio/step_gravel2.snd" />
<file name="SGRAVEL3.SND" type="data" source="audio/step_gravel3.snd" />
<file name="SGRAVEL4.SND" type="data" source="audio/step_gravel4.snd" />
<file name="SSAND1.SND" type="data" source="audio/step_sand1.snd" />
<file name="SSAND2.SND" type="data" source="audio/step_sand2.snd" />
<file name="SSAND3.SND" type="data" source="audio/step_sand3.snd" />
<file name="SSAND4.SND" type="data" source="audio/step_sand4.snd" />
<file name="SSNOW1.SND" type="data" source="audio/step_snow1.snd" />
<file name="SSNOW2.SND" type="data" source="audio/step_snow2.snd" />
<file name="SSNOW3.SND" type="data" source="audio/step_snow3.snd" />
<file name="SSNOW4.SND" type="data" source="audio/step_snow4.snd" />
<file name="SSTONE1.SND" type="data" source="audio/step_stone1.snd" />
<file name="SSTONE2.SND" type="data" source="audio/step_stone2.snd" />
<file name="SSTONE3.SND" type="data" source="audio/step_stone3.snd" />
<file name="SSTONE4.SND" type="data" source="audio/step_stone4.snd" />
<file name="SWOOD1.SND" type="data" source="audio/step_wood1.snd" />
<file name="SWOOD2.SND" type="data" source="audio/step_wood2.snd" />
<file name="SWOOD3.SND" type="data" source="audio/step_wood3.snd" />
<file name="SWOOD4.SND" type="data" source="audio/step_wood4.snd" />
<file name="DCLOTH1.SND" type="data" source="sounds/dig_cloth1.snd" />
<file name="DCLOTH2.SND" type="data" source="sounds/dig_cloth2.snd" />
<file name="DCLOTH3.SND" type="data" source="sounds/dig_cloth3.snd" />
<file name="DCLOTH4.SND" type="data" source="sounds/dig_cloth4.snd" />
<file name="DGLASS1.SND" type="data" source="sounds/dig_glass1.snd" />
<file name="DGLASS2.SND" type="data" source="sounds/dig_glass2.snd" />
<file name="DGLASS3.SND" type="data" source="sounds/dig_glass3.snd" />
<file name="DGRASS1.SND" type="data" source="sounds/dig_grass1.snd" />
<file name="DGRASS2.SND" type="data" source="sounds/dig_grass2.snd" />
<file name="DGRASS3.SND" type="data" source="sounds/dig_grass3.snd" />
<file name="DGRASS4.SND" type="data" source="sounds/dig_grass4.snd" />
<file name="DGRAVEL1.SND" type="data" source="sounds/dig_gravel1.snd" />
<file name="DGRAVEL2.SND" type="data" source="sounds/dig_gravel2.snd" />
<file name="DGRAVEL3.SND" type="data" source="sounds/dig_gravel3.snd" />
<file name="DGRAVEL4.SND" type="data" source="sounds/dig_gravel4.snd" />
<file name="DSAND1.SND" type="data" source="sounds/dig_sand1.snd" />
<file name="DSAND2.SND" type="data" source="sounds/dig_sand2.snd" />
<file name="DSAND3.SND" type="data" source="sounds/dig_sand3.snd" />
<file name="DSAND4.SND" type="data" source="sounds/dig_sand4.snd" />
<file name="DSNOW1.SND" type="data" source="sounds/dig_snow1.snd" />
<file name="DSNOW2.SND" type="data" source="sounds/dig_snow2.snd" />
<file name="DSNOW3.SND" type="data" source="sounds/dig_snow3.snd" />
<file name="DSNOW4.SND" type="data" source="sounds/dig_snow4.snd" />
<file name="DSTONE1.SND" type="data" source="sounds/dig_stone1.snd" />
<file name="DSTONE2.SND" type="data" source="sounds/dig_stone2.snd" />
<file name="DSTONE3.SND" type="data" source="sounds/dig_stone3.snd" />
<file name="DSTONE4.SND" type="data" source="sounds/dig_stone4.snd" />
<file name="DWOOD1.SND" type="data" source="sounds/dig_wood1.snd" />
<file name="DWOOD2.SND" type="data" source="sounds/dig_wood2.snd" />
<file name="DWOOD3.SND" type="data" source="sounds/dig_wood3.snd" />
<file name="DWOOD4.SND" type="data" source="sounds/dig_wood4.snd" />
<file name="SCLOTH1.SND" type="data" source="sounds/step_cloth1.snd" />
<file name="SCLOTH2.SND" type="data" source="sounds/step_cloth2.snd" />
<file name="SCLOTH3.SND" type="data" source="sounds/step_cloth3.snd" />
<file name="SCLOTH4.SND" type="data" source="sounds/step_cloth4.snd" />
<file name="SGRASS1.SND" type="data" source="sounds/step_grass1.snd" />
<file name="SGRASS2.SND" type="data" source="sounds/step_grass2.snd" />
<file name="SGRASS3.SND" type="data" source="sounds/step_grass3.snd" />
<file name="SGRASS4.SND" type="data" source="sounds/step_grass4.snd" />
<file name="SGRAVEL1.SND" type="data" source="sounds/step_gravel1.snd" />
<file name="SGRAVEL2.SND" type="data" source="sounds/step_gravel2.snd" />
<file name="SGRAVEL3.SND" type="data" source="sounds/step_gravel3.snd" />
<file name="SGRAVEL4.SND" type="data" source="sounds/step_gravel4.snd" />
<file name="SSAND1.SND" type="data" source="sounds/step_sand1.snd" />
<file name="SSAND2.SND" type="data" source="sounds/step_sand2.snd" />
<file name="SSAND3.SND" type="data" source="sounds/step_sand3.snd" />
<file name="SSAND4.SND" type="data" source="sounds/step_sand4.snd" />
<file name="SSNOW1.SND" type="data" source="sounds/step_snow1.snd" />
<file name="SSNOW2.SND" type="data" source="sounds/step_snow2.snd" />
<file name="SSNOW3.SND" type="data" source="sounds/step_snow3.snd" />
<file name="SSNOW4.SND" type="data" source="sounds/step_snow4.snd" />
<file name="SSTONE1.SND" type="data" source="sounds/step_stone1.snd" />
<file name="SSTONE2.SND" type="data" source="sounds/step_stone2.snd" />
<file name="SSTONE3.SND" type="data" source="sounds/step_stone3.snd" />
<file name="SSTONE4.SND" type="data" source="sounds/step_stone4.snd" />
<file name="SWOOD1.SND" type="data" source="sounds/step_wood1.snd" />
<file name="SWOOD2.SND" type="data" source="sounds/step_wood2.snd" />
<file name="SWOOD3.SND" type="data" source="sounds/step_wood3.snd" />
<file name="SWOOD4.SND" type="data" source="sounds/step_wood4.snd" />
</dir>
<dir name="texpacks">
<file name="default.zip" type="data" source="classicube.zip" />

BIN
misc/ps1/sounds/audio.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

9
misc/ps1/sounds/gen.sh Executable file
View File

@ -0,0 +1,9 @@
rm "audio.zip" *.wav
wget "classicube.net/static/audio.zip"
unzip "audio.zip"
for i in *.wav; do
~/repos/psxavenc/build/psxavenc -t spu -f 32000 $i "${i%.wav}.snd"
done
rm *.wav

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -465,13 +465,14 @@ static CC_INLINE int FindInPalette(BitmapCol* palette, int pal_count, BitmapCol
}
static int CalcPalette(BitmapCol* palette, struct Bitmap* bmp, int rowWidth) {
int pal_count = 0;
int width = bmp->width, height = bmp->height;
for (int y = 0; y < bmp->height; y++)
BitmapCol* row = bmp->scan0;
int pal_count = 0;
for (int y = 0; y < height; y++, row += rowWidth)
{
BitmapCol* row = bmp->scan0 + y * rowWidth;
for (int x = 0; x < bmp->width; x++)
for (int x = 0; x < width; x++)
{
BitmapCol color = row[x];
int idx = FindInPalette(palette, pal_count, color);

View File

@ -319,14 +319,15 @@ static CC_INLINE int FindInPalette(cc_uint16* pal, int pal_size, cc_uint16 color
}
static CC_INLINE int CalcPalette(cc_uint16* palette, struct Bitmap* bmp, int rowWidth) {
int width = bmp->width, height = bmp->height;
cc_uint16* row = bmp->scan0;
int pal_count = 1;
palette[0] = 0; // entry 0 is transparent colour
for (int y = 0; y < bmp->height; y++)
for (int y = 0; y < height; y++, row += rowWidth)
{
cc_uint16* row = bmp->scan0 + y * rowWidth;
for (int x = 0; x < bmp->width; x++)
for (int x = 0; x < width; x++)
{
cc_uint16 color = row[x];
int idx = FindInPalette(palette, pal_count, color);
@ -378,40 +379,34 @@ GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, int rowWidth, cc_uint8 flags,
char* tmp = (char*)tmp_u16;
u32 banks = vramSetPrimaryBanks(VRAM_A_LCD, VRAM_B_LCD, VRAM_C_LCD, VRAM_D_LCD);
int stride;
int width = bmp->width, height = bmp->height;
cc_uint16* row = bmp->scan0;
if (tex_fmt == GL_RGB4) {
char* buf = malloc(tex_size);
int i = 0;
if (!buf) return NULL;
stride = width >> 3;
for (int y = 0; y < bmp->height; y++)
for (int y = 0; y < height; y++, row += rowWidth)
{
cc_uint16* row = bmp->scan0 + y * rowWidth;
for (int x = 0; x < bmp->width; x++, i++)
for (int x = 0; x < width; x++)
{
int idx = FindInPalette(palette, pal_count, row[x]);
if ((i & 3) == 0) {
buf[i >> 2] = idx;
if ((x & 3) == 0) {
tmp[x >> 2] = idx;
} else {
buf[i >> 2] |= idx << (2 * (i & 3));
tmp[x >> 2] |= idx << (2 * (x & 3));
}
}
CopyHWords(tmp, addr + stride * y, stride);
}
CopyHWords(buf, addr, tex_size >> 1);
free(buf);
} else if (tex_fmt == GL_RGB16) {
stride = bmp->width >> 2;
stride = width >> 2;
for (int y = 0; y < bmp->height; y++, addr += stride)
for (int y = 0; y < height; y++, addr += stride, row += rowWidth)
{
cc_uint16* row = bmp->scan0 + y * rowWidth;
for (int x = 0; x < bmp->width; x++)
for (int x = 0; x < width; x++)
{
int idx = FindInPalette(palette, pal_count, row[x]);
@ -424,24 +419,22 @@ GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, int rowWidth, cc_uint8 flags,
CopyHWords(tmp, addr, stride);
}
} else if (tex_fmt == GL_RGB256) {
stride = bmp->width >> 1;
stride = width >> 1;
for (int y = 0; y < bmp->height; y++, addr += stride)
for (int y = 0; y < height; y++, addr += stride, row += rowWidth)
{
cc_uint16* row = bmp->scan0 + y * rowWidth;
for (int x = 0; x < bmp->width; x++)
for (int x = 0; x < width; x++)
{
tmp[x] = FindInPalette(palette, pal_count, row[x]);
}
CopyHWords(tmp, addr, stride);
}
} else {
stride = bmp->width;
stride = width;
for (int y = 0; y < bmp->height; y++, addr += stride) {
cc_uint16* src = bmp->scan0 + y * rowWidth;
CopyHWords(src, addr, stride);
for (int y = 0; y < height; y++, addr += stride, row += rowWidth)
{
CopyHWords(row, addr, stride);
}
}

View File

@ -168,7 +168,8 @@ static CC_INLINE void DMAFlushBuffer(void) {
*#########################################################################################################################*/
typedef struct CCTexture_ {
cc_uint32 width, height;
cc_uint32 log2_width, log2_height;
cc_uint16 log2_width, log2_height;
cc_uint16 format, pal_index;
cc_uint32 pad[(64 - 16)/4];
BitmapCol pixels[]; // aligned to 64 bytes (only need 16?)
} CCTexture;
@ -181,6 +182,8 @@ GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, int rowWidth, cc_uint8 flags,
tex->height = bmp->height;
tex->log2_width = draw_log2(bmp->width);
tex->log2_height = draw_log2(bmp->height);
tex->format = GS_PSM_32;
tex->pal_index = 0;
CopyTextureData(tex->pixels, bmp->width * BITMAPCOLOR_SIZE,
bmp, rowWidth * BITMAPCOLOR_SIZE);
@ -191,7 +194,7 @@ static void UpdateTextureBuffer(int context, CCTexture* tex, unsigned buf_addr,
PACK_GIFTAG(q, GIF_SET_TAG(1,0,0,0, GIF_FLG_PACKED, 1), GIF_REG_AD);
q++;
PACK_GIFTAG(q, GS_SET_TEX0(buf_addr >> 6, buf_stride >> 6, GS_PSM_32,
PACK_GIFTAG(q, GS_SET_TEX0(buf_addr >> 6, buf_stride >> 6, tex->format,
tex->log2_width, tex->log2_height, TEXTURE_COMPONENTS_RGBA, TEXTURE_FUNCTION_MODULATE,
0, 0, CLUT_STORAGE_MODE1, 0, CLUT_NO_LOAD), GS_REG_TEX0 + context);
q++;
@ -214,10 +217,10 @@ void Gfx_BindTexture(GfxResourceID texId) {
qword_t *Q = packet->data;
Q = draw_texture_transfer(Q, tex->pixels, tex->width, tex->height, GS_PSM_32, dst_addr, dst_stride);
Q = draw_texture_transfer(Q, tex->pixels, tex->width, tex->height, tex->buffer, dst_addr, dst_stride);
Q = draw_texture_flush(Q);
dma_channel_send_chain(DMA_CHANNEL_GIF,packet->data, Q - packet->data, 0,0);
dma_channel_send_chain(DMA_CHANNEL_GIF, packet->data, Q - packet->data, 0,0);
dma_wait_fast();
packet_free(packet);