From 467910c80d13363e867af39e0e901137cdef35c3 Mon Sep 17 00:00:00 2001 From: JimmyBinoculars Date: Sat, 21 Feb 2026 17:30:09 +0000 Subject: [PATCH] Starting matricies, etc... --- VulkanTest | Bin 110816 -> 110816 bytes build/first_app.o | Bin 29928 -> 29992 bytes cve_game_object.hpp | 38 +++++++++++++++++++++++++++++++++ first_app.cpp | 1 + first_app.hpp | 1 + shaders/simple_shader.frag | 1 + shaders/simple_shader.frag.spv | Bin 756 -> 856 bytes shaders/simple_shader.vert | 3 ++- shaders/simple_shader.vert.spv | Bin 1224 -> 1412 bytes 9 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 cve_game_object.hpp diff --git a/VulkanTest b/VulkanTest index 7fea3c0213d20c731bed19208770f6e78f92ef90..c59410048746871862953a745a0b74920917eca6 100755 GIT binary patch delta 4813 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 F{|6Y8gRKAn diff --git a/build/first_app.o b/build/first_app.o index 363cf582409557b0988c643f4e3bf7e863f0a6c7..70b628904d8c96e96f05a3501ba266da11e56de0 100644 GIT binary patch delta 5758 zcmZ{o4Nz3q702IQ5Fy!hLD0)XQNcx}M*jObts>@WB12pk;n49SxL&p!MN z4(?5i7jXxqoPqu)gfq6lV9^CUJtj|f8Q9$g*QftE?CzN+q;}KY^AS#Ja-6rNBj)nX z620pEmkQo6_q@v5-4DI2hC%oFf|)Pmqjk58y4Sq!es%N{_rgQ+I&Zkw$lSrf-)lIl zGb!kG!`&>k8{)DrXqr=VH^1plJ>VHd2w6#4tP-k|^5$R0)3!j4RnQ+K2O@vDhDuAT zxz=noAADJ0Z76yyX;~cWi+?zJZ;YcR7za;?6tnn2~SJ@S2dB znFgboGug4|yP3b77I%+U0=-$YQvF(@6*y^q5Xs^&l9hlgc~Z4H2As;``bvj5n>&SR zS|wb<$m9iyDPCrWO^~vHLkW_%r;vxhT)_1XnQ?(V2+w+;7wH7jd78YD(nH{Y>W zq<@SPboONI4Askqb4Zuqt(&K%{~vu`Q1+>`|COH8G3`9t@Qao`efir z6F%$Jit{U5w_r?+xXl-eXf?RA~Y>e^|IhP=3fJK zd7On|ZXVbF;1-@Su1zlYPlb=3j=OlSRxp{TL-hutk-Q>DuuxlERaW4acA2nC@}-rE zZ;9yNBZUHC3zo{hv_8wx3c4G&M{8HKYYCsh9){y3oDIQnHHQ~UoVuvY&2OysmKq)R zrDniH3D-*q{ghB2xJ>Ty5t;$RCWnCO)TwHyl_4?~LAS|mw2{zKIBKqA6>tl)*FUYpFfo&j|Iy!BP$<>Yc7ewW>snAI@S-1DW@ALMz~EX@%ZM zXuAl)W{p=}W*_eep(gB{LSH7-2Pezc;SP3{bLNNn8EF_$i_52z{35>xq66A}hImMp04D zd4!I`sg*orG#%1pKT;I{SG|ACdR73BUbsc+vwFw7xl>^{w+lB zMI9fCvhB6>uqFc9@%Tz@(=#N1>R;SOUx<%u(Zocz;}M%^gVLww-$(q5wD7k9hY6s& zJWfqn46ud_AfEoB34IG5v4NKpomTFCqW8u8!+6!*1Qf*p>OUenozPPC)gT7mNc>B0 zqu1U>e-L%~ZX*)W^>G$bf;@blggrop`Hbif6FpOX(}-+6M6V_~9i^A(JBa@ymL8Uc z?I&P233!C)zfrol(+luWD_Xlw{2wL$iTI@@nwTi9D<}G68vpi=780-uR#fs}C5FcC zcYx3yqSq3A3(>a`-4ETB9DfV#t^8QuqjtTx46zi8)%QmwMDF8kGn_*Eu(09X>JG#_ zFNh8{Hz|b3kf@&ifhl^W(t#9+?)}Hq3}gBKqx|<-I#g7putTt>>Mr~q+gWA*)<}~x z(d4#X1}Bj&M3YFNbB8rOZ^};yPYC@k@G#fu_;1<$aLVu^I7`F}<-Ou%ULO&oh2(3uztUe|b zztNF~NbKi?hTtqxx>z&F+l3FVA`Oz**xC`Z^23}O?xNRQ1LtZuG}kz7*V(T!TGzR= z#(tf9$ar;d5-H7iNKsM2Y?wewEBK-<^EkdI(F(q9%em|nez$t!!4xricCetM-D8ivtQBo6}4*Bij-c_c9OXc4kD#pKmn6ZY?QbonEwcuLK;pS>5Ymk`&tDX8H;@fV^)Vw~*2u@TQF}YOvEQg!-Yi!Cngo^p=|;Ojb24c zzsk4R=$u9lRgF&9V?-^3>PGtM-z+p2iLzdlL3{ z`0p4g!J$QS!e2Y?L6LPD>?!@JmJDW>;YhBA-Cf0OIgFvS7}yqrm4J!%8br|k6UMd}4owF~cd;Y62}-+* zSuI4m4g7n>+?opKyL0jHDApsAnrNFL(({rdJp`p&zh(h2x4ndAWW8Z_0V2H>82U!9 zU(9T~@kAd^Y2q{s%myNCtG3l@Ea>1!9C{0m-U-DIgdnegqK^2q3nmsRDsa z%@AfV$FwGqshu<}$<&T^>(r!m!X}!;sm_=*CMKz^CX*S>#6)Y%&}mG1&VBchvpd6` z;oN)wzjM$1eD}R&>~nGTniz2l_pv2crisMB?1*bZ_~7>Rh4A%s9WrJ-7js$Dv_}6> z#3DBq{7(+LF2ct%I(s{v(Sxo7Bn_us!b~e0Zgf@ohpOh@a_;rJi5^DP8C~M)p~@gt z?y`TB_3m3GuFh1dEqTh-hq-^KFv96}U`g}8HRw7;1x(b{LCS{*T}M@Y4D*#kPeev& z$+9`=*yJo`l>9@>FJg6ER{FeHJPcQ7zTWF|cD!Hy;Ha>X4~wH zEu)24?!HQmuru&Q{YY$ujZqn{i>NgEQ_aQPHP_#N>M|-D8hjgl4ZerokSzj7qwbp~ z1_Gbk|6>!GflJO;g*X*B7(F4xMc5x(5F~?NF)*@t zMrKD+bwNBB&F!$WmyhN`;oM_rJW7Okh-K@CT%HM zV?(4l&ds=5l)hKXxmWtUEo~9_Qgu-!?E&b*@?WWJoR3m-R7-n9?uVvLNKXg6gPsed z&6c)U+HPq_rNz0U&&Se!N!AdvX;l}RgF#!SN;MEn(~TXHE}EpfROu+(Ow+|z2wEOlHdq6f;67BZR|LiZrOpV6`qdc>#W z8|}1jlTpfi7N{dl@k=4UNQdP`c1HzMz0h71I;Jj0Jur$ihega%hm0bwf^%W?4MwZs zPLVE3VP5eAq6Qj@Lwngv0Wg^}A1>D6Y>nOVyAbtcu`WDtp?H%~i=Nhs+STJqt~pR% zvPsm!krG|h!|9R-7Cp#358)L=i6)eUe^!M5f>@zvHO(Yuj$k9^7VTqt1Ji#6Td>t1 z8QsL_`%0(2Xc4Sv|AOEOz4seN7cy#B4>q-OF+FYyJyq#6_sz_|i0NCHzR}d7t~9#0 zjrlyxd=4?4@3coOiy7tU%3L*asK8=yIF$<)_@PFmFavyi_|NE zI&NffJX7d}Kj`a18dUrMG=5l)FujL$aEj^cnf?hRt<-zxsy7Y|tDVt&rt@C5F#V^@ zzlG^LncmIx-AsSh)O+O(vlxLo(b^T(;AgDC1k?Gt&cs(6C7Qrv_-CCYH`7-zJ(KAx zHT{PMc?`5e`6~S8V9ho&ngd5x>7ocuulm&JQC9#RSUPeA>eaFgf~$4$AlyXTM7FnE z?StickqVf;57Q&*4#bqFCT#hyQu+W}h)2-RnsA#Mq2>Rj^51Rh@Qbo&F$m9=EyNeY z$+FN_N}TM`yzcYhI@0@Cn=y<+JKh)ST5xq!Ua32HiMR(TUy*ki z#b=^Qhc7Daj&GUjhfAoQU1N7FrU_x9vH8KVCNxqeqdAa|l#kq}C}k*2O5y_-Tf?t4u?^jdM3@i zKe<+S@b!#=Abw^}thGB*S${6LvKIHP+HO=ZwMa#x?kb_YT6a`2iocmK(!OfDBaNv| zGSZ2#NP{7fE>-IWkF-Bz#EzQKeS4A7HIR>#uf^FA+8#!)F`5ITVUcaLM3^Y^!a1b; z(obR319xi7PvF%dYI<$xM}J!gZ9wY7*w(K8oY5i}M#^V$h|zU$GK{{$DE^E=%6HZJ zB}O~74HDMr#^i?$e%H{)4o|Z>zJzSe;8`!X2dF z*4Z727@HD>T?Xm(x{)pGrpZ)gqPdej6vM9i-;4Y}!unL3I1DQ{Y(o1I+CGTdxXG}7 zF#kaTC5r-Rg$1)_8OawtAtj71547 zoSkonS7^|W_B@tj;k_McA_YX7SKI?Ww8+q2h9KJaK(u>pH{zkFy})+979MXe5QPv# z?P@L9Its*b@O4n2ezfrr?060T{U + +namespace cve { + + struct Transform2dComponent { + glm::vec2 translation{}; // Position offset + glm::mat2 mat2() { return glm::mat2{1.f}; }; + }; + + class CveGameObject { + public: + using id_t = unsigned int; + + static CveGameObject createGameObject() { + static id_t currentId = 0; + return CveGameObject{currentId++}; + } + + CveGameObject(const CveGameObject &) = delete; + CveGameObject &operator=(const CveGameObject &) = delete; + CveGameObject(CveGameObject &&) = default; + CveGameObject &operator=(CveGameObject &&) = default; + + const id_t getId() { return id; } + + std::shared_ptr model{}; + glm::vec3 color; + Transform2dComponent transform2d{}; + + private: + CveGameObject(id_t objID) : id{objID} {} + id_t id; + }; +} \ No newline at end of file diff --git a/first_app.cpp b/first_app.cpp index 885e034..3c7c098 100644 --- a/first_app.cpp +++ b/first_app.cpp @@ -9,6 +9,7 @@ namespace cve { struct SimplePushConstantData{ + glm::mat2 transform{1.f}; // Identity matrix glm::vec2 offset; alignas(16) glm::vec3 color; }; diff --git a/first_app.hpp b/first_app.hpp index 442cd68..d179456 100644 --- a/first_app.hpp +++ b/first_app.hpp @@ -5,6 +5,7 @@ #include "cve_device.hpp" #include "cve_swap_chain.hpp" #include "cve_model.hpp" +#include "cve_game_object.hpp" #include #include diff --git a/shaders/simple_shader.frag b/shaders/simple_shader.frag index 6092dcd..7fea586 100644 --- a/shaders/simple_shader.frag +++ b/shaders/simple_shader.frag @@ -3,6 +3,7 @@ layout(location = 0) out vec4 outColor; layout(push_constant) uniform Push { + mat2 transform; vec2 offset; vec3 color; } push; diff --git a/shaders/simple_shader.frag.spv b/shaders/simple_shader.frag.spv index 6cc4cd44a0abd69f75b1e7edc4e9adb1c34e713c..9463bc683091ba732b8b8c31e69c0e5ab1b84eee 100644 GIT binary patch literal 856 zcmZ9JOH0F05QV4q;agj^4_!#5OF>+y2%;h)>7vkzKOjh(VxVnGlM3$qZT>1Zg6B)G z8oXsPcg~zUXJ(pTYAu`PY~42Pz!s-sOF~RoDfM3GsdEx1gOjuKQy5#8Pl<50#VN>R z&@dA;*x&EoMiSqiHFf_tb0jJaOR1I z!#GI(F#7Jhg4EkqJazRv#mssr<9M2rI=pE+ZSZ0mFEohR$;v;hMM9^Y=>@Eu!Ke$? zlrZR$ zm$$nz^r(3)CUy2?;E&=^ujVkhU##vh`ugED9EN63TVrqgGTy@{Pj5Hsgr3QLX|hY% EH+bqjoB#j- literal 756 zcmYk2OG^TA6veO4O!JkgwGqQ*AT26_sECMZF`&^07(z!HFh_I@+V$D`RBeLJZyd`% z+_`hkJ@=VO_jb%uRJ2KD!LD+;X>`iWNlA=xLUq~^J2ifa57o?(Lcv7qa=~Mits$ibA;Kc zBjY*RhdS)^xK*=9P;bLg6Rsv}NR9qDzQ#JYrT@IRuB@#d+zQNIU40AkTpIo=!OQ`N zz9^5Ly5LfRiFbsV5e+=`%JSsHQxD9Za82Q=d{>r|og|pq!Q|KF(Nd2%y$@t&pSKsf z19LDtj~Twjvh!UvTA&dgJG0^iSjb~E>~!cV-rgYTiP@cx=``y zzrt-&p4y+P%$+($&x*Z|ZT7(yo8z>@ zs11g87-_5FrRlN>!IIIs*$6?e3yD@{27tE9Rs>rN8 z2?w7!@wvO9F5vH}Cwj!*lGT;=B-`TC2R^-T>dTAuB%Gthzb2b}yYiQ$;e+*LF}KS> z4DrOfE=^71uNt2>07jivX-`64>fo4c`RmeP_{48Y6DMD<*`ebQqla74 z^vQnd0iU-5MtrNWxrcvSntrGQAD{h#xgPH|K795}F8IXh=YfRd{C?&AdJF%dZ2Dzi z_>ZN@O~2H`=l=tHp_!PK|AoW7OCh|Ycly%%wuE`u+iNkIV@CpxPhWQ>%i5QQgcQYj_)Q?>Q4wkEDz3xcS06~Rq?0C6EL2E-KGu2t{_N}k1caO29S zaUpoVYf8Ovm^o+e%$$4Q>L0bJ;>Sy7p4Ba~!&!6{u9;afyZOEijdYZcvq_deDz(r8 z+feLJ$M^866gVdz4#$JZLi42E~1Gl5C8Yi`io98RP{5Lyx z)rH1vv=t$Bv)=u$K}XrD6slBCOU^6Mn&Rtz(jabOoRCOOpM(P0gpYsxTUxyuya|M-`Otp zSKXm!N1zY=S{g3+MRd+w+gFZ;gT6fdxpH@pjUrFMKFhIwAVdPo&-D;^NBGf*6X6#* CC?>lA