Trying to find dolphin texture bug
All checks were successful
Build Dusk / run-tests (push) Successful in 1m37s
Build Dusk / build-linux (push) Successful in 1m23s
Build Dusk / build-psp (push) Successful in 1m45s
Build Dusk / build-dolphin (push) Successful in 2m20s

This commit is contained in:
2026-02-09 14:53:27 -06:00
parent a26e51cf46
commit 073ee8dca9
10 changed files with 56 additions and 58 deletions

View File

@@ -138,8 +138,17 @@ errorret_t displayInit(void) {
// Setup cull modes
GX_SetCullMode(GX_CULL_NONE);
GX_SetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
GX_CopyDisp(DISPLAY.frameBuffer[DISPLAY.whichFrameBuffer], GX_TRUE);
GX_SetDispCopyGamma(GX_GM_1_0);
GX_ClearVtxDesc();
GX_SetVtxDesc(GX_VA_POS, GX_INDEX16);
GX_SetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GX_SetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
#endif
quadInit();

View File

@@ -80,23 +80,14 @@ void meshDraw(
(void*)&mesh->vertices[offset],
sizeof(meshvertex_t) * count
);
GX_ClearVtxDesc();// Just clears so may be un-needed?
GX_SetVtxDesc(GX_VA_POS, GX_INDEX16);
GX_SetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GX_SetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
const u8 stride = (u8)sizeof(meshvertex_t);
GX_SetArray(GX_VA_POS, &mesh->vertices[offset].pos[0], stride);
GX_SetArray(GX_VA_CLR0, &mesh->vertices[offset].color, stride);
GX_SetArray(GX_VA_TEX0, &mesh->vertices[offset].uv[0], stride);
GX_SetArray(GX_VA_POS, (void*)&mesh->vertices[offset].pos[0], stride);
GX_SetArray(GX_VA_CLR0, (void*)&mesh->vertices[offset].color, stride);
GX_SetArray(GX_VA_TEX0, (void*)&mesh->vertices[offset].uv[0], stride);
textureDolphinUploadTEV();
GX_Begin(mesh->primitiveType, GX_VTXFMT0, (uint16_t)count);
for(u16 i = 0; i < (u16)count; ++i) {
GX_Position1x16(i);

View File

@@ -78,7 +78,6 @@ void spriteBatchPush3D(
&SPRITEBATCH_VERTICES[SPRITEBATCH.spriteCount * QUAD_VERTEX_COUNT],
min, max, color, uv0, uv1
);
SPRITEBATCH.spriteCount++;
}

View File

@@ -9,7 +9,7 @@
#include "display/mesh/quad.h"
#include "display/texture.h"
#define SPRITEBATCH_SPRITES_MAX 32
#define SPRITEBATCH_SPRITES_MAX 128
#define SPRITEBATCH_VERTEX_COUNT (SPRITEBATCH_SPRITES_MAX * QUAD_VERTEX_COUNT)

View File

@@ -179,8 +179,8 @@ void textureInit(
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glBindTexture(GL_TEXTURE_2D, 0);
texture->ready = true;
@@ -242,7 +242,7 @@ void textureInit(
texture->rgba,
width, height,
GX_TF_RGB5A3,
GX_CLAMP, GX_CLAMP,
GX_REPEAT, GX_REPEAT,
GX_FALSE
);
@@ -300,7 +300,7 @@ void textureInit(
texture->alpha,
width, height,
GX_TF_I8,
GX_CLAMP, GX_CLAMP,
GX_REPEAT, GX_REPEAT,
GX_FALSE
);
@@ -317,7 +317,6 @@ void textureInit(
case TEXTURE_FORMAT_PALETTE: {
// Not supported, convert to RGBA using lookup
printf("Warning: Palette textures not supported on Dolphin, converted to RGBA1\n");
color_t* formatted = memoryAllocate(width * height * sizeof(color_t));
for(int32_t i = 0; i < width * height; i++) {
uint8_t index = data.palette.data[i];
@@ -326,9 +325,7 @@ void textureInit(
"Palette index out of range"
);
formatted[i] = data.palette.palette->colors[index];
printf("Index %i: Color %02X%02X%02X%02X\n", index, formatted[i].r, formatted[i].g, formatted[i].b, formatted[i].a);
}
printf("Warning: Palette textures not supported on Dolphin, converted to RGBA2\n");
textureInit(
texture, width, height, TEXTURE_FORMAT_RGBA,
@@ -349,6 +346,10 @@ void textureInit(
#endif
}
#if DOLPHIN
static uint8_t dolphinTextureNextSlot = 0;
#endif
void textureBind(texture_t *texture) {
if(TEXTURE_BOUND == texture) return;
@@ -371,7 +372,9 @@ void textureBind(texture_t *texture) {
glBindTexture(GL_TEXTURE_2D, texture->id);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
#elif DOLPHIN
GX_LoadTexObj(&texture->texObj, GX_TEXMAP0);
GX_InvalidateTexAll();
GX_LoadTexObj(&TEXTURE_BOUND->texObj, GX_TEXMAP0 + dolphinTextureNextSlot);
dolphinTextureNextSlot = (dolphinTextureNextSlot + 1) % GX_MAX_TEXMAP;
#endif
TEXTURE_BOUND = texture;
}
@@ -406,6 +409,13 @@ void textureDispose(texture_t *texture) {
#if DOLPHIN
void textureDolphinUploadTEV() {
if(TEXTURE_BOUND == NULL) {
GX_SetNumTexGens(0);
GX_SetNumTevStages(1);
GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
return;
}
// Add channel for vertex color
GX_SetNumChans(1);
GX_SetChanCtrl(
@@ -418,13 +428,6 @@ void textureDispose(texture_t *texture) {
GX_AF_NONE// Attenuation function
);
if(!TEXTURE_BOUND) {
GX_SetNumTexGens(0);
GX_SetNumTevStages(1);
GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
return;
}
// One set of UVs
GX_SetNumTexGens(1);
GX_SetTexCoordGen(
@@ -446,6 +449,8 @@ void textureDispose(texture_t *texture) {
GX_COLOR0A0
);
GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE);
GX_SetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
GX_SetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
break;
case TEXTURE_FORMAT_ALPHA:

View File

@@ -43,10 +43,10 @@ int moduleTextureIndex(lua_State *l) {
assertNotNull(key, "Key cannot be NULL.");
if(stringCompare(key, "width") == 0) {
lua_pushinteger(l, tex->width);
lua_pushnumber(l, tex->width);
return 1;
} else if(stringCompare(key, "height") == 0) {
lua_pushinteger(l, tex->height);
lua_pushnumber(l, tex->height);
return 1;
}