From 38a2b21ba08487ed2e1440d8b06c2d3bef381c27 Mon Sep 17 00:00:00 2001 From: tobid7 Date: Sun, 14 Dec 2025 22:59:16 +0100 Subject: [PATCH] Add BMF loading support - Add ability to make textures not unloadable --- example/romfs/ComicNeue.png | Bin 0 -> 59269 bytes example/source/main.cpp | 5 ++- include/amethyst/iron.hpp | 5 ++- include/amethyst/texture.hpp | 2 ++ source/iron/font.cpp | 61 ++++++++++++++++++++++++++++------- 5 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 example/romfs/ComicNeue.png diff --git a/example/romfs/ComicNeue.png b/example/romfs/ComicNeue.png new file mode 100644 index 0000000000000000000000000000000000000000..ba442379a0b359a200e5556ed5419b289e0a062e GIT binary patch literal 59269 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 z%0A4r^9m@5>;Z@Ei398TKCJ#Idh_HAkY|X#doS(^_*+fF==52bi!McF0AIzsm zd4QSsqOa(tr99m*2mZv&9AhgbrQQlq(_9gg7qn7Jtg)ljzxnrZ?Zy)49g&9^IUE1p zShk$?1_I66hX_S+pYB6=Ak+j~ucUl;4oLtiq@@cmHswb41RUjP6*Pe&5WfSbo8;V7BNiwOr;tDJXku;JB{k|C{Ph0wz!PBgTi&-XcQcLXdvm#dZSqr^H4&PJVQ zI=^R>jW-*%9V}4E`fgUikcBceK0;q8a4YpmX~E}!(;BeOH&EZp>Z^Q9qu79EL)^ehh)6W;Zv zXk|;cu;v6tV@5Y&?mK|CU(!avVK+B z3Rq@RkcZI6C`f$p4$sA+FnvBf=d!c?&w5Zje@`pFpW7xC-Tk*;2AEdrH z5zDw*sa!fxs3o!Wx-!V%I1F>~t>k&6&QotC6SSY(CsUkBu@>y#KtBZUG40a2`Y(Lv zZoTtt^!rWxRv|kM3iGkN0khw$Tl(BA8O_RTzBu8F*uod*#@g{M)v#hEQC>ZM~P}9JpF&6Gs zMXSfx!5>F+KZM-olIC$bLxi@NI^R@@D}0C!iJdL24qFENq(T!iYKWl~Wk%Z{f zRMU9+&p^y(-@n;k4$Sg9lL^l9GSp~P^2)qmx;>5r4>JIkw7JJxnVe_Qj5t=pA}(l*pi zNZc%@9U`+2%*q8Baywv}GF>T!nza3WwHpg|;an+^AA{NSBRly8?K6XBXSXD>q88hs zBfY%P^mSAph3|{=u^kX%eZJPO6Ql@+ye(`fCFH2dwC~{#ty4T8)@%jI0X+FXbU%xa zlkWP}l*0!-X{m-B*+;x!c!uTu;LhWKKaAA0?e>d1Pb?kl5OA#+z+8i*FS(0mo>aY7 zLqpwW3qrZt)s#I8xaRjlX%9h>Qt^otoS^o+f2%T^hI7_|*bZl4Kn419@tH=#JaA^1 z!Pw-FOy$zG&&E0Z<_LM~@TxZNW>wMb??}*YO+ae!EneoA=>vX>nN8%gAO? zg2X_&tl2B-K2I^475sR$S-c^K2F;T2=yNrLo4E}}IOSZUPix@0t1Y0Qndnst>Z!=` z1SwSs((&`d-x$);xF;db{NCp28I8(yg1cg$v6uOY=LoulZ@f*+_Y7vF zf;MDp^>Jan#ZE8{@t}Pjz@m$v@1MV2foq`vhJQgiO4b+n6N85Lu>89oS5XxHQ7rqYdW{KmCxJsNIX{Soz15jdI#jat>4t1AjtLg-6&miOY! z%sz(opu~3rOuArltqYLPCZ3)AK}p%8sUh|`|ADaegL1GNs`y^WBVBkS9M6Ce>k#0q zuT2hyYQ2V;3Z6yOUeR!(VXabX2B-E?R!j(y+lm6;4dRPjb@U)tVDh$k zp8Ab%tZS8FX!o<*(xci2d{elK@}wM$c}%w1N*+A{GuzUS2a)a(Fxd}ffBmR#pty|< z7Ly9Mo=}v8!)pYsrwN_+vDk8gpU~G|F%Q12_1C`2?~7WYp3dqneJD>KShvFox@lRS zlZ@Lb>dB?*nE6gNc|~P0G8oE!1U(S~<4kz?fLh7q2jF3`1uf^r@0=$|l*8N*H+VQ~ zAb$Y5pZsXpg6@KRKgZhw*c*vsSw#5g{K89Tr-O2z@mNb&Q8?VJQuS6aDwnf3-Fv78 zrX90Hyfu)_!;r&K3)Y;_m>GzC_vfwEDNr19@=noFprIe)VfX$pyOS%>-FD4VlMz%V z3g-$&2R;b9KH2eC3jltm#+j`IEh+C?9Yrv>x551SjbszdRPBJWQBY=>I$6CuBzEr$ zVNkOX74||C^^yP!f}397FA?sM9+(Tj)ZFLX5E0&BJfr!Ex$2_UImsH((yYbo^^63(Drzx$`Wl zY#zQjfLt}UI&fp!H&L8wTQ>z1$Rva92iBU}1)VEMR+~?V0tU9gGW9cK;U>T{cqz%* zYc848w7GZFypK1cg;)!*xka1dK6Cc>q?(U}hJokR)+p_q_GLzsJTWVRoW}h}6bG$* zET&B+O6`xpW!h<;h{5gdACROCCTvM>VW>2TXyDTTNholNT}MDv4F2e0I#BTEQq@J| z;yna#ZT!$FW||z(DRv9;DA)SA$ySF2-txuMxXrp^OT|TJZ~>i}?|y{X%H73-B1?M1Pn3Rfw7{bLrP>YjC~#dWlL;y!+*G0C03@=&%Z^calQdxEMjP%EJ3u74S&gO z!*g$Rv8iwV*T@yDxe~x2y7W);E3WSb0>m`0Bl_t3+3f!o*rR#MH$PrIeERiS{MSh2 zPh|BOvTlE<<@`F_J5=)?k-a3Vh7~^apIJrfJ9i*I$=?QLTIfQkH@{j%#IoA*5?%`~ zoq2+_f&grJuXc;uywaB>bEJfT9Zh*yT^RYhj+E!n0N5P37xN3l)yoXkVki4+ zLE5wt+N%Xj15XmluKsk$DP2*xk^w*Lg3}Y|_8pN;AfdS zDrMZ$dCowWGkA&`5E3{C@A+u@Fc{!80fL2=0^MIhoJmJsC5ECDsO50zZ>7kEg7oYd z%i6CFP0H~zU;Eb*MP5Ror?c2-2N=#@GQBWe9*IFd00)1S7>o zzc&t;`L$3$2Rrcp-jWodqIL*d--Vu|cLnU@hu&dYou@4^K$9d{DI~CUDwW!5!pJS) zlcatmL1pS?ng*um9|(S?NXjI~k^7DEJ6W+o|2j(^YNmaJs}ezi;`0o26LRYLVWYxc zeR3(thi^YdVF8lUjK0o^;-&ectXoh&uD^IHZ;Wi82p6cM%YU|r5_ZH)_(~rb0KTB} z_o=>qSMy$^568sKzv#X0s{jgV{v-UvgknL0)_C##$>!?>a&2od}A)f)`8!yfy^?ik@+}klU*&JvxjI!ko?r0F`AqKrX=g!tRtX0>iG-mq(m2RquwWCMbxwYv zKxNxss!jMIs8QgR_191SvIf*fhn!9IIo}{>6D`g(3umV9|9v^YmrsY9l&MhjFcY3G^s*t(s%$3 zecXFKb1yOdd$e;h6pV+w_f6wph0?qw?Lb@B2%k~WDp*RA;yFff#9tQdwQ8%r6nc`> z{JS2&fBv2Hg>EW2)zIn*s&ztu$2C%$$B&fjDJhD#9z??KeYouIr{1DukLRVxPm^cb_%jLf}&UpiX5{S?6QnxIMH^ z6n7A5Q7ubbn0{g_!{!X{pY?qg4vPW`+s6P8Lc_`wj#rQC)awXy&R0%_3+uZHvTKp# zy2ZuB4pkW?ZdAo;@*_bjl7C-S=?QgQoJVG^fY1$;uIXNqC<;QHb-Op;6NEnWz9>^t zA!qG#(+#0oVKA(i1U+Bw*o5SDeYNs2>>~O1+#`Cs+UH03hiGGW( ze2U*HQSv%VzbFMbuOU2j=K6aDMfVeAvW0bIL=D@~UK%17jt3zqxyM!(4eh}fc7!Nt zfFe@*)FAR>q_lYk`x-;5AP!%l_Y9sphy4iA0eP(@Cl!s?3B)pWSCvRxg1Q5}PLpa` zmt=iE3Rc8}gZlw`|M36Q)R{*$aqe$?l8^+*#v%xTKoG1H2}F#7AZ8*OkSzhJRk18e zuVd>1h$t#%hA7}d2^9pf%1{=u78OKP)ItFjw;F}3fK@AkLN&5ONJ4U7{M}#A&7V2R znVig<%sbEbd7jU6s0;t#q&2iJCZVPpiPBg|DUYALASBlUC(;VJ8&x^}D_!s_DmtLg z&L8?hA9%~7;O|3bi$}4Ii$LAfSHT`_ei|fQUJ)8 zgB=eVW;U?bsf8*#=n9ZolL51$omR{&|4JQF*7XwV4f*--SMp{Qw66An%EFP~D9OHf zvYxstu_QosUY%QU(;#^(XyYrOdpqw0VNAAW<)@smX~_$^lySxGnR19aA}pQT^vY0o z9#urA<7ptdk{bQQix9Ue5x;M?*n;?r@vVUb!vPoJ4xm6gGlAWw5V6sRN%zHhzdi&_ zwUN0&4LNs)S;aBLLzCXP|Cc~u`+hm#OG^&`uVXh9hX;_ANAlmn40vx2+{F3d+&3e%We(Rpdqck6>F(xXW^St%s^+F*KF-%xNJyYFfool%}lv-y|ILwVu(j5-zy z=t6E{WlHFm3~-s&a*%5g(7hPx?|$SqDuWD=Zto0rxiYCl0`VS-2F$*V$p<|ZJR|)k z&qPs9I^JRMYa3=phGdx<*HKIoyb;r2jWAuzg{K%D{gi^M;UEO`?$vDK)K#=IpQ-;E zX6@iQx`>az*)83$@vuz#o;6Fq13S3DI*sC1D06NgG#Q6QnKr>MjanNJY@bcrZm37b zPZEp8-vvVV-bJ)C_IMQ-E8~~L`)Mz+luNPZ$a@L*KqfD-zgPCtFknsW8iiUQ;v6@t z7<^QN716RcVQSCQJ+XGkb4#v1+kR<^s|?Qj-l%TW)XV_rFPMixoIUN^lqfsqFnQ@3 zo~$8N3`(Sz-;)MhC`7b7sfmw5sT_Vk(EMNPil%g-p>971I;&d_T-*2l|mZB^w6&Mli&tljtt! z1h_!2=bkZYJ&O9+W;CLxgx4u@r#nJVA!P=l*11 zwJd@!nM2YKFKlft6{0@0Y*Dq0hrl~Y14{&3$u*=$@4&R0o$P5;`?gdU3u{>UJZAZP z8-!GZ-2o(8>3qwSm0ne|fr-W~mV4?%{O1%&HeKdUc0g+0c;MG2WNeRR0T0BupwYsW z!X73Tn8>h?t6?2$6({JJ^>YikSObbp;y!FKf%@Wl>TJmWO$!*73O-e!DZZpsg~_aU znZc(w;hZ5OHs>&qB^Tc#+2RpNdvhrZmG)dKuM_ZMjYDE@rWum!^Y54PXG9WDEmz4^ zM)$Eb&G(6*t|$v#gY1;Hn@bH6(TFRuV9rM!LF%;MWEFG&oY!DiOT$3?Aor$mzMYLj zZ0SICt^)(A;#^id^+BH4BEzR1%R&{5NJ-z=U`|5V44x97!BbwLaq+IQ31{LSF#3qP z*pv#R^>33(D+tP-l+MNeN>_qkLA#^pdM_EZSDsqYHN*2ZYb$$_Rdrf#OJTz#yOeG_ z4FROtmFYp)@o?H>(xVl*kfLDq6AQvfsvym69>jAI#t>?sSaPctK&O885vll4u{XH) zAc{Atok4fQ(PYtk2FfM~{IrB621p)b2YfXXjq=J~Sp7wmeMf)hqF{$7-0484F2^ay z%LMeM|4Hka**Gw)gV9~EAw=;MtT=Yi@*n4eXiUHbnSxak@JHc7d^;4z+UZ4ihS;A- zX$V^>`4!fItT=5@0O;{n+szdRpz({m)4Fs5B5^AIW_F(1A}TeD^JCf+JmD=E72SYR z18yI~1dpqxqZnA8gT4(jVQ-{X!-W*nPo=951h8bvIy+>z4CL^X8#~@g>)jRBXKQaL zXdSGz4=cxsGp>4U8TgR3x6Ff@D)&A>w{|89T|XVg{~%R&l!)FgO@a_T&pp*X184~M z$80jqp+!(6rjN+fm_!j$p)T({o$&)5keWlG?r9qDSl(4)#0@B8iYB<5MhyJ(j3^kY zi~_3be~kilBb=xqw0?gEAJMiiic>VH@g=R2ajZxQ+GiyWW$k&XHWlG;753bhd z$LS6aXr1DrKKph_D7}sh7DDrGun-co+qgBxf77L!2br~^?<4C@4V8siuTEmMXj zcj27ZHJ$Pe3wB0yaqt!~OdUiktzlc}MeydePE+>CRY`S}*Xm z93>8PfhbOak;-iEeSRX8Hf~7Ij5mslJ^;t`-0ks{VmQ<4Y#`|`vUz-nsyZmJG&Q5% z?%c*2#}1O5@w-E%=+E34$pw5z_#GaS6wT$^z}E;t&*3iavMP9gXp7f-3c&G|g8pH0 zfeAjtPga+(s2M2-UFZp9VVTlkYnoHSHuO|6)cXV3_ z^}1?t3!jKTWS&Q1|MXohjTkUI@I2Q#$5T1F>0)C)1Pou+G1k)$FP&%X%iP0}W-ziv z6Bo)wHufvMcFtHXz~H@Ym8rlA>YmMLwxEv@PUZcIJp#l`r+&fWwVKTp@tQ^~p^;Wx zDDuB3W>Z1FE*o;l9t!*+Mv43tTBm+x+8bN3Iz~$DE@QP`iePolX@#n$L(nm}Isgwd zgRXjW2j%3KP2LRG#g5r|7c+TNk{idNysPn{hTLfvSIhEhZdV801iy~AKdR@Rl-ajY zRFl-}eT*OXaCpr#G6FcEc~|W!mbcp>As6~(zV=2&b)>rSAvKuRHXLKjSt`uITm34#4m()QD z_({c2>F$EMTuvyl;f!SpHQX1ZnBiGS=^XD?#W)ph81_&puuK>)xMnG=XU|=Pv zTiAqML0eFV=cO}$=i`q3rhBEEjq+I&5HLL+3?CJ8#BV9(?&{oiZ!(An$AuF|iZHRQ znSlN!`XC&vWQ)qaZ{hxGsrBB21SSAd{}rJfP*AA8Ix1+3&Hp628yic_Jmer)>Vk~{ zxly_V@;xaf@?v0+h<=|g?JVnB_&Gfb@~x}a#u~EFX!wXpw7&d}ann-bF0*St#QhVq zBf+tWX=$E5$clEy+HEeo=Y*j8ZDiV{@{x_II@iDT;CR&((o}?!j@ZETLQ!9ez6dB*iY=M4lul_$)tw z(u~igqVPeeyVyc`F1Hc;q|SNF3u<38%g^@Sfi=q~n%&DPr_0W5|K|Yze>@Oqg}xxZ VFdy0Zj0u6qs+Hj@E-a7B_zxx9txW&` literal 0 HcmV?d00001 diff --git a/example/source/main.cpp b/example/source/main.cpp index f5f8ab0..a0a5a28 100755 --- a/example/source/main.cpp +++ b/example/source/main.cpp @@ -11,8 +11,11 @@ class Example : public Amy::App { Top = C3D::CreateScreen(GFX_TOP); Mgr = new Amy::AssetMgr(); Iron::Init(); + auto fnt = Iron::Font::New(); + fnt->LoadBMF("romfs:/ComicNeue.png"); Mgr->AutoLoad("icon", "romfs:/icon.png"); - Mgr->AutoLoad("font", "romfs:/ComicNeue.ttf"); + Mgr->Add("font", fnt); + // Mgr->AutoLoad("font", "romfs:/ComicNeue.ttf"); dl = new Iron::Drawlist(); dl->SetFont(Mgr->Get("font")); } diff --git a/include/amethyst/iron.hpp b/include/amethyst/iron.hpp index 7de445c..8715a65 100644 --- a/include/amethyst/iron.hpp +++ b/include/amethyst/iron.hpp @@ -105,6 +105,7 @@ class Iron { public: Drawlist() { DrawSolid(); } ~Drawlist() { pData.clear(); } + AMY_SHARED(Drawlist) // required due to memory management Drawlist(const Drawlist&) = delete; @@ -122,7 +123,9 @@ class Iron { void DrawSolid(); void DrawTex(Texture::Ref tex) { pTex = tex; } void SetFont(Font::Ref fnt) { pCurrentFont = fnt; } - + void SetFontScale(float v) { pFontScale = v; } + float GetFontScale() { return pFontScale; } + void DefaultFontScale() { pFontScale = 0.7; } /** Draw Api */ void DrawRect(const fvec2& pos, const fvec2& size, ui color, int thickness = 1); diff --git a/include/amethyst/texture.hpp b/include/amethyst/texture.hpp index 2511bbc..804e85d 100755 --- a/include/amethyst/texture.hpp +++ b/include/amethyst/texture.hpp @@ -29,6 +29,8 @@ class Texture : public Asset { // Dont set as loaded as only the root tex can be loaded } void Unload(); + void Unloadable(bool v) { pLoaded = v; } + bool Unloadable() { return pLoaded; } int W() const { return pSize.x; } int& W() { return pSize.x; } diff --git a/source/iron/font.cpp b/source/iron/font.cpp index 51fac60..8bb8d59 100644 --- a/source/iron/font.cpp +++ b/source/iron/font.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #if AMY_STB_TT == 1 #define STB_TRUETYPE_IMPLEMENTATION @@ -8,14 +9,52 @@ #include namespace Amy { -void Iron::Font::LoadBMF(ksr path) {} +// Dont read this code please ... tnaks +void Iron::Font::LoadBMF(ksr path) { + Image img(path); + if (img.Width() != img.Height() || img.Bpp() != 4) { + throw std::runtime_error( + "[Amy] Font: BMF is not in rgba or not 1x1 dimensioned!"); + } + auto base = Amy::Texture::New(); + base->Load(img.GetBuffer(), img.Width(), img.Height(), img.Bpp()); + base->Unloadable(false); + PxHeight = img.Height() / 16; + for (int i = 0; i < img.Height(); i += PxHeight) { + for (int j = 0; j < img.Width(); j += PxHeight) { + int maxw = 0; + Amy::Texture::Ref tex = Amy::Texture::New(); + for (int y = i; y < i + PxHeight; y++) { + for (int x = j; x < j + PxHeight; x++) { + if (img.GetBuffer()[((y * img.Width() + x) * 4) + 3] != 0) { + maxw = std::max(maxw, x - j); + } + } + } + maxw++; + tex->Load(base->Ptr(), base->Size(), base->Uv()); + Codepoint cp; + cp.Cp = (i / PxHeight) * 16 + (j / PxHeight); + cp.Offset = 0.f; + cp.Size = fvec2(maxw, PxHeight); + cp.Tex = tex; + cp.Uv = fvec4(float(j) / float(img.Width()), + 1.f - float(i) / float(img.Height()), + float(j + maxw) / float(img.Width()), + 1.f - float(i + PxHeight) / float(img.Height())); + cp.Valid = maxw != 0; + pCodeMap[(i / PxHeight) * 16 + (j / PxHeight)] = cp; + Textures.push_back(tex); + } + } +} void Iron::Font::LoadTTF(ksr path, int size) { auto data = Amy::Utils::LoadFile2Mem(path); LoadTTF(data, size); } -void Iron::Font::LoadTTF(const vec &data, int size) { +void Iron::Font::LoadTTF(const vec& data, int size) { /** * Some additional Info: * Removed the stbtt get bitmapbox as we dont need to place @@ -54,7 +93,7 @@ void Iron::Font::LoadTTF(const vec &data, int size) { if (stbtt_IsGlyphEmpty(&inf, gi)) continue; int w = 0, h = 0, xo = 0, yo = 0; - unsigned char *bitmap = + unsigned char* bitmap = stbtt_GetCodepointBitmap(&inf, scale, scale, ii, &w, &h, &xo, &yo); if (!bitmap || w <= 0 || h <= 0) { if (bitmap) free(bitmap); @@ -130,13 +169,13 @@ void Iron::Font::LoadTTF(const vec &data, int size) { } } -void Iron::Font::pMakeAtlas(bool final, vec &font_tex, int texszs, +void Iron::Font::pMakeAtlas(bool final, vec& font_tex, int texszs, Texture::Ref tex) { tex->Load(font_tex, texszs, texszs); Textures.push_back(tex); } -Iron::Font::Codepoint &Iron::Font::GetCodepoint(ui cp) { +Iron::Font::Codepoint& Iron::Font::GetCodepoint(ui cp) { // Check if codepoijt exist or return a static invalid one auto res = pCodeMap.find(cp); if (res == pCodeMap.end()) { @@ -157,7 +196,7 @@ fvec2 Iron::Font::GetTextBounds(ksr text, float scale) { float cfs = (PxFactor * scale) / (float)PxHeight; float lh = (float)PxHeight * cfs; size_t index = 0; - for (auto &it : wtext) { + for (auto& it : wtext) { if (it == L'\0') { break; } @@ -192,9 +231,9 @@ fvec2 Iron::Font::GetTextBounds(ksr text, float scale) { return res; } -void Iron::Font::CmdTextEx(vec &cmds, const fvec2 &pos, ui color, - float scale, const std::string &text, - AmyTextFlags flags, const fvec2 &box) { +void Iron::Font::CmdTextEx(vec& cmds, const fvec2& pos, ui color, + float scale, const std::string& text, + AmyTextFlags flags, const fvec2& box) { fvec2 off; float cfs = (PxFactor * scale) / (float)PxHeight; float lh = (float)PxHeight * cfs; @@ -218,7 +257,7 @@ void Iron::Font::CmdTextEx(vec &cmds, const fvec2 &pos, ui color, lines.push_back(tmp); } - for (auto &it : lines) { + for (auto& it : lines) { /*if (flags & AmyTextFlags_Short) { fvec2 tmp_dim; it = ShortText(it, box.x() - pos.x(), tmp_dim); @@ -228,7 +267,7 @@ void Iron::Font::CmdTextEx(vec &cmds, const fvec2 &pos, ui color, auto cmd = Command::New(); auto Tex = GetCodepoint(wline[0]).Tex; cmd->Tex = Tex; - for (auto &jt : wline) { + for (auto& jt : wline) { auto cp = GetCodepoint(jt); if ((!cp.Valid && jt != L' ' && jt != L'\n' && jt != L'\t') && jt != L'\r') {