From a263d4718fbf84ce17142edc7b81c6f27f97bfb5 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 17 Aug 2020 19:52:42 -0700 Subject: [PATCH] 3DS: Use an actual texture format --- src/platform/3ds/CMakeLists.txt | 11 ++++++++-- src/platform/3ds/gui-font.c | 35 ++++++++++++++++---------------- src/platform/3ds/icons.raw | Bin 32768 -> 0 bytes src/platform/3ds/icons.t3x | Bin 0 -> 809 bytes 4 files changed, 27 insertions(+), 19 deletions(-) delete mode 100644 src/platform/3ds/icons.raw create mode 100644 src/platform/3ds/icons.t3x diff --git a/src/platform/3ds/CMakeLists.txt b/src/platform/3ds/CMakeLists.txt index 29da450fa..cec7d0bea 100644 --- a/src/platform/3ds/CMakeLists.txt +++ b/src/platform/3ds/CMakeLists.txt @@ -7,6 +7,7 @@ find_program(BANNERTOOL bannertool) find_program(MAKEROM makerom) find_program(PICASSO picasso) find_program(RAW2C raw2c) +find_program(TEX3DS tex3ds) set(STRIP "${cross_prefix_path}strip" CACHE INTERNAL "symbol stripper") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format" PARENT_SCOPE) @@ -65,9 +66,15 @@ add_custom_command(OUTPUT ${BINARY_NAME}.bnr COMMAND ${BANNERTOOL} makebanner -ci ${CMAKE_CURRENT_SOURCE_DIR}/banner.cgfx -a ${CMAKE_CURRENT_SOURCE_DIR}/bios.wav -o ${BINARY_NAME}.bnr DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/banner.cgfx ${CMAKE_CURRENT_SOURCE_DIR}/bios.wav) +# tex3ds binaries as of 2.0.1-3 crash if you try to do this +#add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/icons.t3x +# COMMAND ${TEX3DS} -f rgb5551 -o icons.t3x ${CMAKE_SOURCE_DIR}/res/icons.png +# MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/res/icons.png +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/icons.c - COMMAND ${RAW2C} ${CMAKE_SOURCE_DIR}/src/platform/3ds/icons.raw - DEPENDS ${CMAKE_SOURCE_DIR}/src/platform/3ds/icons.raw) + COMMAND ${RAW2C} ${CMAKE_CURRENT_SOURCE_DIR}/icons.t3x + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/icons.t3x) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin ${CMAKE_CURRENT_BINARY_DIR}/uishader.shbin.h diff --git a/src/platform/3ds/gui-font.c b/src/platform/3ds/gui-font.c index 4d4a4f01e..7d073c709 100644 --- a/src/platform/3ds/gui-font.c +++ b/src/platform/3ds/gui-font.c @@ -9,6 +9,7 @@ #include #include "icons.h" +#include #include "ctr-gpu.h" #define FONT_SIZE 15.6f @@ -44,12 +45,8 @@ struct GUIFont* GUIFontCreate(void) { tex->param = GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR) | GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE); } - tex = &guiFont->icons; - C3D_TexInitVRAM(tex, 256, 64, GPU_RGBA5551); - - GSPGPU_FlushDataCache(icons, icons_size); - GX_RequestDma((u32*) icons, tex->data, icons_size); - gspWaitForDMA(); + Tex3DS_Texture t3x = Tex3DS_TextureImport(icons, icons_size, &guiFont->icons, NULL, true); + Tex3DS_TextureFree(t3x); return guiFont; } @@ -136,23 +133,28 @@ void GUIFontDrawIcon(const struct GUIFont* font, int x, int y, enum GUIAlignment y -= metric.height; break; } + s16 origin = font->icons.height - metric.y - metric.height; + switch (orient) { case GUI_ORIENT_HMIRROR: - ctrAddRectEx(color, x + metric.width, y, - -metric.width, metric.height, - metric.x, metric.y, + ctrAddRectEx(color, x + metric.width, y + metric.height, + -metric.width, -metric.height, + metric.x, origin, metric.width, metric.height, 0); break; case GUI_ORIENT_VMIRROR: - ctrAddRectEx(color, x, y + metric.height, - metric.width, -metric.height, - metric.x, metric.y, + ctrAddRectEx(color, x, y, + metric.width, metric.height, + metric.x, origin, metric.width, metric.height, 0); break; case GUI_ORIENT_0: default: // TODO: Rotation - ctrAddRect(color, x, y, metric.x, metric.y, metric.width, metric.height); + ctrAddRectEx(color, x, y + metric.height, + metric.width, -metric.height, + metric.x, origin, + metric.width, metric.height, 0); break; } } @@ -163,11 +165,10 @@ void GUIFontDrawIconSize(const struct GUIFont* font, int x, int y, int w, int h, if (icon >= GUI_ICON_MAX) { return; } - struct GUIIconMetric metric = defaultIconMetrics[icon]; - ctrAddRectEx(color, x, y, + ctrAddRectEx(color, x, y + (h ? h : metric.height), w ? w : metric.width, - h ? h : metric.height, - metric.x, metric.y, + h ? -h : -metric.height, + metric.x, font->icons.height - metric.y - metric.height, metric.width, metric.height, 0); } diff --git a/src/platform/3ds/icons.raw b/src/platform/3ds/icons.raw deleted file mode 100644 index d60815862624a8737de6c7e9ab84da490dae5552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeHN32xj#4BIc{OZoqwwqOWC$H*S<5fn-2qSk06Q4;0NdeYu*zRZ9bFau`54445k zU_o^@syubY1(ioY_)c)!HWtFH|80IGL=Y zmb1Ld(|u|b^9mPPA}cdwe|qPgj&9uym;p0j2F!pNFau`54E%lubY6%~^QMK&4?;_!l^mV zyXNmAfQKkCj+HW1G-|3U+n&vzF{ZU}Sx>O9=}a-xo^ZM?IwhYIw>>87JASk8*;;kT zM|$*4OV;xfK>u|z(8O? zqMotyOsYtoPo?i<_m_@-aYj{qKi_KqNOu3OAH_Ys-}|rnF&-zX^R4<09XqI+Qu~sf zANe64ZSp*q!U-={a$NVjEbL$TS#|XKjx4~|#rfl2pDWod&43v&17^Ssm;p0j2F!pN zc$R_u=6#OA(+2;Y8=lnX_<486@8><9q#i+-ao1g7X56l?5p}2gQ=fNh;9a7_IPcLx>4s;KW*3Wr+D^{6FIDs@+9Tif0nPK*wYM{0W)9*%zzm%17^Ssn1SzMfN$wMn_M~n z(Lc^9U9VLNSF&1l660xzCnlav=pW}4M-S+SXK8iRb?&oo*sfik|NsB|V^W;&Iy3Ei{`{R0 zKLcFzr&i^R&p#}jYqgT+_2<6)8B>3!#LtrE(DAyiyplV+a3v>y?9rY-*Z%y!YyQD+ zXJ5RBTs`WJ<}O*S^YaIvzcc^Nh;=hy2F!pN_?-;!Jq6#@{J!q`u50=89j$xov?}~~ zx5GE;`aU<=Eroh24Dw&HIIqEx+i}`U|p}T(SF^8Nk86Ke?$uh zGMa#|5V$|e|ToQ=g;Rb R*zw8?m;p0j2F$>ofq&E}wLJg; diff --git a/src/platform/3ds/icons.t3x b/src/platform/3ds/icons.t3x new file mode 100644 index 0000000000000000000000000000000000000000..171b8bd011268e9ab5288804ac967c356b78fc8e GIT binary patch literal 809 zcmW+#Uuc_E6hHUgY_Sf^P5a=3e?CF53@J$%B3SI_9whi6Nmfgcw7m`)L-yd;j1kZ! zcRq=Tn6ws=uDR%h;nSBI`yktLABv382UELIMr|*$hcRUITSgh8_UAXxc{m&n=g0Z| zejG;6aU%8x#gT}U(sY4dIsl7U`n9acGPoCr1sS|2NT#BhVwnPk$m?f{3q?^pOOf|P zQB(S9(A?$VVQ!ISoscQX)2MDuj$<<~kL1vD^vak_ra>#_anBYsq{uK9=5 zY1WWhUH&V9k?)xA*^Tu^B-?~ZBDAC-%@NCUyajGHJGqpd*{qxj7DlSucg5~ z)*b@06{`CO;Z>g|uJfR#{azP6!#tn4(Vem0oqw$Luib)}ULr3wQ!qwdx8w4=`iOki z?Zq-#^OjnqhCe&Un>CwJHfHo8k819?3EjG1abfckn9c_U(tG*`^$iReC;Q&o1)gQ` GbNmM+AaP~@ literal 0 HcmV?d00001