Trying to find dolphin texture bug
This commit is contained in:
@@ -125,6 +125,9 @@ elseif(DUSK_TARGET_SYSTEM STREQUAL "gamecube" OR DUSK_TARGET_SYSTEM STREQUAL "wi
|
||||
DOLPHIN
|
||||
)
|
||||
|
||||
# Disable all warnings
|
||||
target_compile_options(${DUSK_LIBRARY_TARGET_NAME} PRIVATE -w)
|
||||
|
||||
# Custom flags for cglm
|
||||
set(CGLM_SHARED OFF CACHE BOOL "Build cglm shared" FORCE)
|
||||
set(CGLM_STATIC ON CACHE BOOL "Build cglm static" FORCE)
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
|
||||
add_asset(TILESET ui.png type=PALETTIZED tileWidth=8 tileHeight=8)
|
||||
add_asset(TILESET cell.png type=PALETTIZED tileWidth=8 tileHeight=8)
|
||||
add_asset(TILESET grid.png type=PALETTIZED tileWidth=8 tileHeight=8)
|
||||
add_asset(IMAGE grid_bg.png type=PALETTIZED)
|
||||
BIN
assets/minesweeper/grid_bg.png
Normal file
BIN
assets/minesweeper/grid_bg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 123 B |
@@ -20,10 +20,7 @@ camera = cameraCreate(CAMERA_PROJECTION_TYPE_ORTHOGRAPHIC)
|
||||
tilesetUi = tilesetGetByName("ui")
|
||||
textureUi = textureLoad(tilesetUi.texture)
|
||||
|
||||
tilesetGrid = tilesetGetByName("grid")
|
||||
textureGrid = textureLoad(tilesetGrid.texture)
|
||||
gridPiece = tilesetPositionGetUV(tilesetGrid, 0, 0)
|
||||
gridSlice = tilesetPositionGetUV(tilesetGrid, 11, 3)
|
||||
textureGrid = textureLoad("minesweeper/grid_bg.dpi")
|
||||
|
||||
tilesetCell = tilesetGetByName("cell")
|
||||
textureCell = textureLoad(tilesetCell.texture)
|
||||
@@ -65,28 +62,21 @@ function cellDraw(x, y, type)
|
||||
end
|
||||
|
||||
function backgroundDraw()
|
||||
local t = (TIME.time * 3) % 1
|
||||
local offXStart = gridPiece.u1 * t
|
||||
local offYStart = gridPiece.v1 * t
|
||||
local offXEnd = offXStart + gridPiece.u1
|
||||
local offYEnd = offYStart + gridPiece.v1
|
||||
|
||||
-- Tile background
|
||||
local cols = math.ceil(screenGetWidth() / tilesetGrid.tileWidth)
|
||||
local rows = math.ceil(screenGetHeight() / tilesetGrid.tileHeight)
|
||||
local t = (TIME.time / 20) % 1
|
||||
local scaleX = screenGetWidth() / textureGrid.width
|
||||
local scaleY = screenGetHeight() / textureGrid.height
|
||||
local u0 = t * scaleX
|
||||
local v0 = t * scaleY
|
||||
local u1 = scaleX + u0
|
||||
local v1 = scaleY + v0
|
||||
|
||||
for y = 0, rows do
|
||||
for x = 0, cols do
|
||||
spriteBatchPush(
|
||||
textureGrid,
|
||||
x * tilesetGrid.tileWidth, y * tilesetGrid.tileHeight,
|
||||
(x + 1) * tilesetGrid.tileWidth, (y + 1) * tilesetGrid.tileHeight,
|
||||
colorWhite(),
|
||||
gridSlice.u0 + offXStart, gridSlice.v0 + offYStart,
|
||||
gridSlice.u1 + offXEnd, gridSlice.v1 + offYEnd
|
||||
)
|
||||
end
|
||||
end
|
||||
spriteBatchPush(textureGrid,
|
||||
0, 0,
|
||||
screenGetWidth(), screenGetHeight(),
|
||||
colorWhite(),
|
||||
u0, v0,
|
||||
u1, v1
|
||||
)
|
||||
end
|
||||
|
||||
function sceneDispose()
|
||||
@@ -112,6 +102,7 @@ function sceneRender()
|
||||
y * tilesetCell.tileHeight + offsetY,
|
||||
cells[i]
|
||||
)
|
||||
break
|
||||
end
|
||||
end
|
||||
spriteBatchFlush()
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -78,7 +78,6 @@ void spriteBatchPush3D(
|
||||
&SPRITEBATCH_VERTICES[SPRITEBATCH.spriteCount * QUAD_VERTEX_COUNT],
|
||||
min, max, color, uv0, uv1
|
||||
);
|
||||
|
||||
SPRITEBATCH.spriteCount++;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user