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
|
DOLPHIN
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Disable all warnings
|
||||||
|
target_compile_options(${DUSK_LIBRARY_TARGET_NAME} PRIVATE -w)
|
||||||
|
|
||||||
# Custom flags for cglm
|
# Custom flags for cglm
|
||||||
set(CGLM_SHARED OFF CACHE BOOL "Build cglm shared" FORCE)
|
set(CGLM_SHARED OFF CACHE BOOL "Build cglm shared" FORCE)
|
||||||
set(CGLM_STATIC ON CACHE BOOL "Build cglm static" 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 ui.png type=PALETTIZED tileWidth=8 tileHeight=8)
|
||||||
add_asset(TILESET cell.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")
|
tilesetUi = tilesetGetByName("ui")
|
||||||
textureUi = textureLoad(tilesetUi.texture)
|
textureUi = textureLoad(tilesetUi.texture)
|
||||||
|
|
||||||
tilesetGrid = tilesetGetByName("grid")
|
textureGrid = textureLoad("minesweeper/grid_bg.dpi")
|
||||||
textureGrid = textureLoad(tilesetGrid.texture)
|
|
||||||
gridPiece = tilesetPositionGetUV(tilesetGrid, 0, 0)
|
|
||||||
gridSlice = tilesetPositionGetUV(tilesetGrid, 11, 3)
|
|
||||||
|
|
||||||
tilesetCell = tilesetGetByName("cell")
|
tilesetCell = tilesetGetByName("cell")
|
||||||
textureCell = textureLoad(tilesetCell.texture)
|
textureCell = textureLoad(tilesetCell.texture)
|
||||||
@@ -65,28 +62,21 @@ function cellDraw(x, y, type)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function backgroundDraw()
|
function backgroundDraw()
|
||||||
local t = (TIME.time * 3) % 1
|
local t = (TIME.time / 20) % 1
|
||||||
local offXStart = gridPiece.u1 * t
|
local scaleX = screenGetWidth() / textureGrid.width
|
||||||
local offYStart = gridPiece.v1 * t
|
local scaleY = screenGetHeight() / textureGrid.height
|
||||||
local offXEnd = offXStart + gridPiece.u1
|
local u0 = t * scaleX
|
||||||
local offYEnd = offYStart + gridPiece.v1
|
local v0 = t * scaleY
|
||||||
|
local u1 = scaleX + u0
|
||||||
-- Tile background
|
local v1 = scaleY + v0
|
||||||
local cols = math.ceil(screenGetWidth() / tilesetGrid.tileWidth)
|
|
||||||
local rows = math.ceil(screenGetHeight() / tilesetGrid.tileHeight)
|
|
||||||
|
|
||||||
for y = 0, rows do
|
spriteBatchPush(textureGrid,
|
||||||
for x = 0, cols do
|
0, 0,
|
||||||
spriteBatchPush(
|
screenGetWidth(), screenGetHeight(),
|
||||||
textureGrid,
|
colorWhite(),
|
||||||
x * tilesetGrid.tileWidth, y * tilesetGrid.tileHeight,
|
u0, v0,
|
||||||
(x + 1) * tilesetGrid.tileWidth, (y + 1) * tilesetGrid.tileHeight,
|
u1, v1
|
||||||
colorWhite(),
|
)
|
||||||
gridSlice.u0 + offXStart, gridSlice.v0 + offYStart,
|
|
||||||
gridSlice.u1 + offXEnd, gridSlice.v1 + offYEnd
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function sceneDispose()
|
function sceneDispose()
|
||||||
@@ -112,6 +102,7 @@ function sceneRender()
|
|||||||
y * tilesetCell.tileHeight + offsetY,
|
y * tilesetCell.tileHeight + offsetY,
|
||||||
cells[i]
|
cells[i]
|
||||||
)
|
)
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
spriteBatchFlush()
|
spriteBatchFlush()
|
||||||
|
|||||||
@@ -138,8 +138,17 @@ errorret_t displayInit(void) {
|
|||||||
|
|
||||||
// Setup cull modes
|
// Setup cull modes
|
||||||
GX_SetCullMode(GX_CULL_NONE);
|
GX_SetCullMode(GX_CULL_NONE);
|
||||||
|
GX_SetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
|
||||||
GX_CopyDisp(DISPLAY.frameBuffer[DISPLAY.whichFrameBuffer], GX_TRUE);
|
GX_CopyDisp(DISPLAY.frameBuffer[DISPLAY.whichFrameBuffer], GX_TRUE);
|
||||||
GX_SetDispCopyGamma(GX_GM_1_0);
|
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
|
#endif
|
||||||
|
|
||||||
quadInit();
|
quadInit();
|
||||||
|
|||||||
@@ -80,23 +80,14 @@ void meshDraw(
|
|||||||
(void*)&mesh->vertices[offset],
|
(void*)&mesh->vertices[offset],
|
||||||
sizeof(meshvertex_t) * count
|
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);
|
const u8 stride = (u8)sizeof(meshvertex_t);
|
||||||
GX_SetArray(GX_VA_POS, &mesh->vertices[offset].pos[0], stride);
|
GX_SetArray(GX_VA_POS, (void*)&mesh->vertices[offset].pos[0], stride);
|
||||||
GX_SetArray(GX_VA_CLR0, &mesh->vertices[offset].color, stride);
|
GX_SetArray(GX_VA_CLR0, (void*)&mesh->vertices[offset].color, stride);
|
||||||
GX_SetArray(GX_VA_TEX0, &mesh->vertices[offset].uv[0], stride);
|
GX_SetArray(GX_VA_TEX0, (void*)&mesh->vertices[offset].uv[0], stride);
|
||||||
|
|
||||||
textureDolphinUploadTEV();
|
textureDolphinUploadTEV();
|
||||||
|
|
||||||
GX_Begin(mesh->primitiveType, GX_VTXFMT0, (uint16_t)count);
|
GX_Begin(mesh->primitiveType, GX_VTXFMT0, (uint16_t)count);
|
||||||
for(u16 i = 0; i < (u16)count; ++i) {
|
for(u16 i = 0; i < (u16)count; ++i) {
|
||||||
GX_Position1x16(i);
|
GX_Position1x16(i);
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ void spriteBatchPush3D(
|
|||||||
&SPRITEBATCH_VERTICES[SPRITEBATCH.spriteCount * QUAD_VERTEX_COUNT],
|
&SPRITEBATCH_VERTICES[SPRITEBATCH.spriteCount * QUAD_VERTEX_COUNT],
|
||||||
min, max, color, uv0, uv1
|
min, max, color, uv0, uv1
|
||||||
);
|
);
|
||||||
|
|
||||||
SPRITEBATCH.spriteCount++;
|
SPRITEBATCH.spriteCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "display/mesh/quad.h"
|
#include "display/mesh/quad.h"
|
||||||
#include "display/texture.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)
|
#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_MIN_FILTER, GL_NEAREST);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_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_S, GL_REPEAT);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
texture->ready = true;
|
texture->ready = true;
|
||||||
@@ -242,7 +242,7 @@ void textureInit(
|
|||||||
texture->rgba,
|
texture->rgba,
|
||||||
width, height,
|
width, height,
|
||||||
GX_TF_RGB5A3,
|
GX_TF_RGB5A3,
|
||||||
GX_CLAMP, GX_CLAMP,
|
GX_REPEAT, GX_REPEAT,
|
||||||
GX_FALSE
|
GX_FALSE
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -300,7 +300,7 @@ void textureInit(
|
|||||||
texture->alpha,
|
texture->alpha,
|
||||||
width, height,
|
width, height,
|
||||||
GX_TF_I8,
|
GX_TF_I8,
|
||||||
GX_CLAMP, GX_CLAMP,
|
GX_REPEAT, GX_REPEAT,
|
||||||
GX_FALSE
|
GX_FALSE
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -317,7 +317,6 @@ void textureInit(
|
|||||||
|
|
||||||
case TEXTURE_FORMAT_PALETTE: {
|
case TEXTURE_FORMAT_PALETTE: {
|
||||||
// Not supported, convert to RGBA using lookup
|
// 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));
|
color_t* formatted = memoryAllocate(width * height * sizeof(color_t));
|
||||||
for(int32_t i = 0; i < width * height; i++) {
|
for(int32_t i = 0; i < width * height; i++) {
|
||||||
uint8_t index = data.palette.data[i];
|
uint8_t index = data.palette.data[i];
|
||||||
@@ -326,9 +325,7 @@ void textureInit(
|
|||||||
"Palette index out of range"
|
"Palette index out of range"
|
||||||
);
|
);
|
||||||
formatted[i] = data.palette.palette->colors[index];
|
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(
|
textureInit(
|
||||||
texture, width, height, TEXTURE_FORMAT_RGBA,
|
texture, width, height, TEXTURE_FORMAT_RGBA,
|
||||||
@@ -349,6 +346,10 @@ void textureInit(
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DOLPHIN
|
||||||
|
static uint8_t dolphinTextureNextSlot = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
void textureBind(texture_t *texture) {
|
void textureBind(texture_t *texture) {
|
||||||
if(TEXTURE_BOUND == texture) return;
|
if(TEXTURE_BOUND == texture) return;
|
||||||
|
|
||||||
@@ -371,7 +372,9 @@ void textureBind(texture_t *texture) {
|
|||||||
glBindTexture(GL_TEXTURE_2D, texture->id);
|
glBindTexture(GL_TEXTURE_2D, texture->id);
|
||||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
#elif DOLPHIN
|
#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
|
#endif
|
||||||
TEXTURE_BOUND = texture;
|
TEXTURE_BOUND = texture;
|
||||||
}
|
}
|
||||||
@@ -406,6 +409,13 @@ void textureDispose(texture_t *texture) {
|
|||||||
|
|
||||||
#if DOLPHIN
|
#if DOLPHIN
|
||||||
void textureDolphinUploadTEV() {
|
void textureDolphinUploadTEV() {
|
||||||
|
if(TEXTURE_BOUND == NULL) {
|
||||||
|
GX_SetNumTexGens(0);
|
||||||
|
GX_SetNumTevStages(1);
|
||||||
|
GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Add channel for vertex color
|
// Add channel for vertex color
|
||||||
GX_SetNumChans(1);
|
GX_SetNumChans(1);
|
||||||
GX_SetChanCtrl(
|
GX_SetChanCtrl(
|
||||||
@@ -418,13 +428,6 @@ void textureDispose(texture_t *texture) {
|
|||||||
GX_AF_NONE// Attenuation function
|
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
|
// One set of UVs
|
||||||
GX_SetNumTexGens(1);
|
GX_SetNumTexGens(1);
|
||||||
GX_SetTexCoordGen(
|
GX_SetTexCoordGen(
|
||||||
@@ -446,6 +449,8 @@ void textureDispose(texture_t *texture) {
|
|||||||
GX_COLOR0A0
|
GX_COLOR0A0
|
||||||
);
|
);
|
||||||
GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE);
|
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;
|
break;
|
||||||
|
|
||||||
case TEXTURE_FORMAT_ALPHA:
|
case TEXTURE_FORMAT_ALPHA:
|
||||||
|
|||||||
@@ -43,10 +43,10 @@ int moduleTextureIndex(lua_State *l) {
|
|||||||
assertNotNull(key, "Key cannot be NULL.");
|
assertNotNull(key, "Key cannot be NULL.");
|
||||||
|
|
||||||
if(stringCompare(key, "width") == 0) {
|
if(stringCompare(key, "width") == 0) {
|
||||||
lua_pushinteger(l, tex->width);
|
lua_pushnumber(l, tex->width);
|
||||||
return 1;
|
return 1;
|
||||||
} else if(stringCompare(key, "height") == 0) {
|
} else if(stringCompare(key, "height") == 0) {
|
||||||
lua_pushinteger(l, tex->height);
|
lua_pushnumber(l, tex->height);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user