mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-12-22 16:30:23 +00:00
Fix syntax changes, re-add 1.5, add 1.25
I've also changed the switch I've added for the scaling to follow the same formatting as the other ones
This commit is contained in:
parent
9dde4455b2
commit
a4f7535a03
2 changed files with 57 additions and 101 deletions
|
@ -28,10 +28,10 @@ void djui_gfx_displaylist_end(void) {
|
|||
}
|
||||
|
||||
static const Vtx vertex_djui_simple_rect[] = {
|
||||
{ { { 0, -1, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{ { { 1, -1, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{ { { 1, 0, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{ { { 0, 0, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{{{ 0, -1, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
{{{ 1, -1, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
{{{ 1, 0, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
{{{ 0, 0, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
};
|
||||
|
||||
const Gfx dl_djui_simple_rect[] = {
|
||||
|
@ -40,7 +40,7 @@ const Gfx dl_djui_simple_rect[] = {
|
|||
gsDPSetCombineMode(G_CC_FADE, G_CC_FADE),
|
||||
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
|
||||
gsSPVertexNonGlobal(vertex_djui_simple_rect, 4, 0),
|
||||
gsSP2Triangles(0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles(0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
|
@ -48,26 +48,20 @@ f32 djui_gfx_get_scale(void) {
|
|||
u32 windowWidth, windowHeight;
|
||||
wm_api->get_dimensions(&windowWidth, &windowHeight);
|
||||
switch (configDjuiScale) {
|
||||
case 0:
|
||||
return 0.85f;
|
||||
|
||||
case 1:
|
||||
return 1.0f;
|
||||
|
||||
case 2:
|
||||
return 1.25f;
|
||||
|
||||
default:
|
||||
return 1.0f;
|
||||
case 0: return 0.85f;
|
||||
case 1: return 1.0f;
|
||||
case 2: return 1.25f;
|
||||
case 3: return 1.5f;
|
||||
default: return 1.0f;
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////////
|
||||
|
||||
static const Vtx vertex_djui_image[] = {
|
||||
{ { { 0, -1, 0 }, 0, { 0, 2048 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{ { { 1, -1, 0 }, 0, { 2048, 2048 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{ { { 1, 0, 0 }, 0, { 2048, 0 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{ { { 0, 0, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff } } },
|
||||
{{{ 0, -1, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
{{{ 1, -1, 0 }, 0, { 2048, 2048 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
{{{ 1, 0, 0 }, 0, { 2048, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
{{{ 0, 0, 0 }, 0, { 0, 0 }, { 0xff, 0xff, 0xff, 0xff }}},
|
||||
};
|
||||
|
||||
const Gfx dl_djui_image[] = {
|
||||
|
@ -76,12 +70,11 @@ const Gfx dl_djui_image[] = {
|
|||
gsDPSetCombineMode(G_CC_FADEA, G_CC_FADEA),
|
||||
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
gsDPLoadTextureBlock(NULL, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 64, 0, G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0,
|
||||
0),
|
||||
gsDPLoadTextureBlock(NULL, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 64, 0, G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0, 0),
|
||||
gsSPExecuteDjui(G_TEXOVERRIDE_DJUI),
|
||||
gsSPVertexNonGlobal(vertex_djui_image, 4, 0),
|
||||
// gsSPExecuteDjui(G_TEXCLIP_DJUI),
|
||||
gsSP2Triangles(0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles(0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPEndDisplayList(),
|
||||
|
@ -89,40 +82,27 @@ const Gfx dl_djui_image[] = {
|
|||
|
||||
static u8 djui_gfx_power_of_two(u32 value) {
|
||||
switch (value) {
|
||||
case 2:
|
||||
return 1;
|
||||
case 4:
|
||||
return 2;
|
||||
case 8:
|
||||
return 3;
|
||||
case 16:
|
||||
return 4;
|
||||
case 32:
|
||||
return 5;
|
||||
case 64:
|
||||
return 6;
|
||||
case 128:
|
||||
return 7;
|
||||
case 256:
|
||||
return 8;
|
||||
case 512:
|
||||
return 9;
|
||||
case 1024:
|
||||
return 10;
|
||||
default:
|
||||
return 11;
|
||||
case 2: return 1;
|
||||
case 4: return 2;
|
||||
case 8: return 3;
|
||||
case 16: return 4;
|
||||
case 32: return 5;
|
||||
case 64: return 6;
|
||||
case 128: return 7;
|
||||
case 256: return 8;
|
||||
case 512: return 9;
|
||||
case 1024: return 10;
|
||||
default: return 11;
|
||||
}
|
||||
}
|
||||
|
||||
void djui_gfx_render_texture(const u8 *texture, u32 w, u32 h, u32 bitSize, bool filter) {
|
||||
void djui_gfx_render_texture(const u8* texture, u32 w, u32 h, u32 bitSize, bool filter) {
|
||||
gDPSetTextureFilter(gDisplayListHead++, filter ? G_TF_BILERP : G_TF_POINT);
|
||||
gDPSetTextureOverrideDjui(gDisplayListHead++, texture, djui_gfx_power_of_two(w),
|
||||
djui_gfx_power_of_two(h), bitSize);
|
||||
gDPSetTextureOverrideDjui(gDisplayListHead++, texture, djui_gfx_power_of_two(w), djui_gfx_power_of_two(h), bitSize);
|
||||
gSPDisplayList(gDisplayListHead++, dl_djui_image);
|
||||
}
|
||||
|
||||
void djui_gfx_render_texture_tile(const u8 *texture, u32 w, u32 h, u32 bitSize, u32 tileX, u32 tileY,
|
||||
u32 tileW, u32 tileH, bool filter) {
|
||||
void djui_gfx_render_texture_tile(const u8* texture, u32 w, u32 h, u32 bitSize, u32 tileX, u32 tileY, u32 tileW, u32 tileH, bool filter) {
|
||||
if (!gDisplayListHead) {
|
||||
LOG_ERROR("Retrieved a null displaylist head");
|
||||
return;
|
||||
|
@ -139,24 +119,12 @@ void djui_gfx_render_texture_tile(const u8 *texture, u32 w, u32 h, u32 bitSize,
|
|||
return;
|
||||
}
|
||||
|
||||
f32 aspect = tileH ? ((f32) tileW / (f32) tileH) : 1;
|
||||
f32 aspect = tileH ? ((f32)tileW / (f32)tileH) : 1;
|
||||
// I don't know why adding 1 to all of the UVs seems to fix rendering, but it does...
|
||||
vtx[0] = (Vtx){ { { 0, -1, 0 },
|
||||
0,
|
||||
{ (tileX * 2048.0f) / (f32) w, ((tileY + tileH) * 2048.0f) / (f32) h },
|
||||
{ 0xff, 0xff, 0xff, 0xff } } };
|
||||
vtx[1] = (Vtx){ { { 1 * aspect, -1, 0 },
|
||||
0,
|
||||
{ ((tileX + tileW) * 2048.0f) / (f32) w, ((tileY + tileH) * 2048.0f) / (f32) h },
|
||||
{ 0xff, 0xff, 0xff, 0xff } } };
|
||||
vtx[2] = (Vtx){ { { 1 * aspect, 0, 0 },
|
||||
0,
|
||||
{ ((tileX + tileW) * 2048.0f) / (f32) w, (tileY * 2048.0f) / (f32) h },
|
||||
{ 0xff, 0xff, 0xff, 0xff } } };
|
||||
vtx[3] = (Vtx){ { { 0, 0, 0 },
|
||||
0,
|
||||
{ (tileX * 2048.0f) / (f32) w, (tileY * 2048.0f) / (f32) h },
|
||||
{ 0xff, 0xff, 0xff, 0xff } } };
|
||||
vtx[0] = (Vtx) {{{ 0, -1, 0 }, 0, { ( tileX * 2048.0f) / (f32)w, ((tileY + tileH) * 2048.0f) / (f32)h }, { 0xff, 0xff, 0xff, 0xff }}};
|
||||
vtx[1] = (Vtx) {{{ 1 * aspect, -1, 0 }, 0, { ((tileX + tileW) * 2048.0f) / (f32)w, ((tileY + tileH) * 2048.0f) / (f32)h }, { 0xff, 0xff, 0xff, 0xff }}};
|
||||
vtx[2] = (Vtx) {{{ 1 * aspect, 0, 0 }, 0, { ((tileX + tileW) * 2048.0f) / (f32)w, ( tileY * 2048.0f) / (f32)h }, { 0xff, 0xff, 0xff, 0xff }}};
|
||||
vtx[3] = (Vtx) {{{ 0, 0, 0 }, 0, { ( tileX * 2048.0f) / (f32)w, ( tileY * 2048.0f) / (f32)h }, { 0xff, 0xff, 0xff, 0xff }}};
|
||||
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_FADEA, G_CC_FADEA);
|
||||
|
@ -165,16 +133,14 @@ void djui_gfx_render_texture_tile(const u8 *texture, u32 w, u32 h, u32 bitSize,
|
|||
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
|
||||
gDPSetTextureOverrideDjui(gDisplayListHead++, texture, djui_gfx_power_of_two(w),
|
||||
djui_gfx_power_of_two(h), bitSize);
|
||||
gDPLoadTextureBlockWithoutTexture(gDisplayListHead++, NULL, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 64, 0,
|
||||
G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0, 0);
|
||||
gDPSetTextureOverrideDjui(gDisplayListHead++, texture, djui_gfx_power_of_two(w), djui_gfx_power_of_two(h), bitSize);
|
||||
gDPLoadTextureBlockWithoutTexture(gDisplayListHead++, NULL, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 64, 0, G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0, 0);
|
||||
|
||||
*(gDisplayListHead++) = (Gfx) gsSPExecuteDjui(G_TEXOVERRIDE_DJUI);
|
||||
|
||||
gSPVertexNonGlobal(gDisplayListHead++, vtx, 4, 0);
|
||||
*(gDisplayListHead++) = (Gfx) gsSPExecuteDjui(G_TEXCLIP_DJUI);
|
||||
gSP2TrianglesDjui(gDisplayListHead++, 0, 1, 2, 0x0, 0, 2, 3, 0x0);
|
||||
gSP2TrianglesDjui(gDisplayListHead++, 0, 1, 2, 0x0, 0, 2, 3, 0x0);
|
||||
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
|
||||
|
@ -182,31 +148,30 @@ void djui_gfx_render_texture_tile(const u8 *texture, u32 w, u32 h, u32 bitSize,
|
|||
|
||||
/////////////////////////////////////////////
|
||||
|
||||
void djui_gfx_position_translate(f32 *x, f32 *y) {
|
||||
void djui_gfx_position_translate(f32* x, f32* y) {
|
||||
u32 windowWidth, windowHeight;
|
||||
wm_api->get_dimensions(&windowWidth, &windowHeight);
|
||||
*x = GFX_DIMENSIONS_FROM_LEFT_EDGE(0)
|
||||
+ *x * ((f32) SCREEN_HEIGHT / (f32) windowHeight) * djui_gfx_get_scale();
|
||||
*y = SCREEN_HEIGHT - *y * ((f32) SCREEN_HEIGHT / (f32) windowHeight) * djui_gfx_get_scale();
|
||||
*x = GFX_DIMENSIONS_FROM_LEFT_EDGE(0) + *x * ((f32)SCREEN_HEIGHT / (f32)windowHeight) * djui_gfx_get_scale();
|
||||
*y = SCREEN_HEIGHT - *y * ((f32)SCREEN_HEIGHT / (f32)windowHeight) * djui_gfx_get_scale();
|
||||
}
|
||||
|
||||
void djui_gfx_scale_translate(f32 *width, f32 *height) {
|
||||
void djui_gfx_scale_translate(f32* width, f32* height) {
|
||||
u32 windowWidth, windowHeight;
|
||||
wm_api->get_dimensions(&windowWidth, &windowHeight);
|
||||
|
||||
*width = *width * ((f32) SCREEN_HEIGHT / (f32) windowHeight) * djui_gfx_get_scale();
|
||||
*height = *height * ((f32) SCREEN_HEIGHT / (f32) windowHeight) * djui_gfx_get_scale();
|
||||
*width = *width * ((f32)SCREEN_HEIGHT / (f32)windowHeight) * djui_gfx_get_scale();
|
||||
*height = *height * ((f32)SCREEN_HEIGHT / (f32)windowHeight) * djui_gfx_get_scale();
|
||||
}
|
||||
|
||||
void djui_gfx_size_translate(f32 *size) {
|
||||
void djui_gfx_size_translate(f32* size) {
|
||||
u32 windowWidth, windowHeight;
|
||||
wm_api->get_dimensions(&windowWidth, &windowHeight);
|
||||
|
||||
*size = *size * ((f32) SCREEN_HEIGHT / (f32) windowHeight) * djui_gfx_get_scale();
|
||||
*size = *size * ((f32)SCREEN_HEIGHT / (f32)windowHeight) * djui_gfx_get_scale()
|
||||
}
|
||||
|
||||
bool djui_gfx_add_clipping_specific(struct DjuiBase *base, f32 dX, f32 dY, f32 dW, f32 dH) {
|
||||
struct DjuiBaseRect *clip = &base->clip;
|
||||
bool djui_gfx_add_clipping_specific(struct DjuiBase* base, f32 dX, f32 dY, f32 dW, f32 dH) {
|
||||
struct DjuiBaseRect* clip = &base->clip;
|
||||
|
||||
f32 clipX2 = clip->x + clip->width;
|
||||
f32 clipY2 = clip->y + clip->height;
|
||||
|
@ -215,18 +180,10 @@ bool djui_gfx_add_clipping_specific(struct DjuiBase *base, f32 dX, f32 dY, f32 d
|
|||
f32 dY2 = dY + dH;
|
||||
|
||||
// completely clipped
|
||||
if (dX2 < clip->x) {
|
||||
return true;
|
||||
}
|
||||
if (dX > clipX2) {
|
||||
return true;
|
||||
}
|
||||
if (dY2 < clip->y) {
|
||||
return true;
|
||||
}
|
||||
if (dY > clipY2) {
|
||||
return true;
|
||||
}
|
||||
if (dX2 < clip->x) { return true; }
|
||||
if (dX > clipX2) { return true; }
|
||||
if (dY2 < clip->y) { return true; }
|
||||
if (dY > clipY2) { return true; }
|
||||
|
||||
f32 dClipX1 = fmax((clip->x - dX) / dW, 0);
|
||||
f32 dClipY1 = fmax((clip->y - dY) / dH, 0);
|
||||
|
@ -234,14 +191,13 @@ bool djui_gfx_add_clipping_specific(struct DjuiBase *base, f32 dX, f32 dY, f32 d
|
|||
f32 dClipY2 = fmax((dY - (clipY2 - dH)) / dH, 0);
|
||||
|
||||
if ((dClipX1 != 0) || (dClipY1 != 0) || (dClipX2 != 0) || (dClipY2 != 0)) {
|
||||
gDPSetTextureClippingDjui(gDisplayListHead++, (u8) (dClipX1 * 255), (u8) (dClipY1 * 255),
|
||||
(u8) (dClipX2 * 255), (u8) (dClipY2 * 255));
|
||||
gDPSetTextureClippingDjui(gDisplayListHead++, (u8)(dClipX1 * 255), (u8)(dClipY1 * 255), (u8)(dClipX2 * 255), (u8)(dClipY2 * 255));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool djui_gfx_add_clipping(struct DjuiBase *base) {
|
||||
struct DjuiBaseRect *comp = &base->comp;
|
||||
bool djui_gfx_add_clipping(struct DjuiBase* base) {
|
||||
struct DjuiBaseRect* comp = &base->comp;
|
||||
return djui_gfx_add_clipping_specific(base, comp->x, comp->y, comp->width, comp->height);
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) {
|
|||
"WDW"
|
||||
};
|
||||
|
||||
char* djuiScaleChoices[3] = {"x0.85", "x1.0", "x1.25"};
|
||||
char* djuiScaleChoices[4] = {"x0.85", "x1.0", "x1.25", "x1.5"};
|
||||
|
||||
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(MENU_OPTIONS, LEVEL), levelChoices, 18, &configMenuLevel, NULL);
|
||||
djui_base_set_enabled(&selectionbox1->base, !configMenuRandom);
|
||||
|
@ -78,7 +78,7 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) {
|
|||
|
||||
djui_checkbox_create(body, DLANG(DJUI_THEMES, CENTER), &configDjuiThemeCenter, djui_panel_misc_djui_setting_change);
|
||||
|
||||
djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_SCALE), djuiScaleChoices, 3, &configDjuiScale, djui_panel_misc_djui_setting_change);
|
||||
djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_SCALE), djuiScaleChoices, 4, &configDjuiScale, djui_panel_misc_djui_setting_change);
|
||||
|
||||
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue