From aa53a80fcea68ebbb944964333e9198c364c559d Mon Sep 17 00:00:00 2001 From: Lillian Salehi Date: Thu, 21 Nov 2024 23:54:07 -0600 Subject: [PATCH] Multisampling implementation using the max samples the GPU supports --- .../index/agnosiaimgui.h.C442C0E7D513336B.idx | Bin 0 -> 388 bytes .../devicelibrary.cpp.A6A50BF3BD186A09.idx | Bin 8994 -> 9608 bytes .../index/entrypoint.cpp.9286A9B0BD8A276E.idx | Bin 4378 -> 4590 bytes .../index/global.cpp.DB8A6A1A4BC0BF3A.idx | Bin 2986 -> 3318 bytes .../index/global.h.67055BFC9A2F7BD6.idx | Bin 5460 -> 5784 bytes .../graphicspipeline.cpp.F94E3ACB17FA6762.idx | Bin 10476 -> 10508 bytes .../index/render.cpp.657B8B8CBD5B3B6B.idx | Bin 7154 -> 7400 bytes .../index/render.h.A0C955D8D0DA424C.idx | Bin 698 -> 762 bytes .../index/texture.cpp.14763AFB742F8112.idx | Bin 10590 -> 11076 bytes .../index/texture.h.712506A996DB5236.idx | Bin 858 -> 962 bytes imgui.ini | 8 ++++ src/agnosiaimgui.cpp | 19 ++++++++ src/agnosiaimgui.h | 11 +++++ src/devicelibrary.cpp | 33 ++++++++++++++ src/entrypoint.cpp | 9 ++++ src/global.cpp | 4 ++ src/global.h | 9 +++- src/graphics/graphicspipeline.cpp | 11 +++-- src/graphics/render.cpp | 43 +++++++++--------- src/graphics/render.h | 1 + src/graphics/texture.cpp | 27 ++++++++--- src/graphics/texture.h | 31 +++++++------ 22 files changed, 156 insertions(+), 50 deletions(-) create mode 100644 .cache/clangd/index/agnosiaimgui.h.C442C0E7D513336B.idx create mode 100644 imgui.ini create mode 100644 src/agnosiaimgui.cpp create mode 100644 src/agnosiaimgui.h diff --git a/.cache/clangd/index/agnosiaimgui.h.C442C0E7D513336B.idx b/.cache/clangd/index/agnosiaimgui.h.C442C0E7D513336B.idx new file mode 100644 index 0000000000000000000000000000000000000000..2988329a42ee6779b8b50b0f19986e1bfc72c05b GIT binary patch literal 388 zcmWIYbaSg=WMFVk@vO*AElFfyU|*`*C7J|m(Rv=##<^* zt!?_kzUQ=B@5@7K6I&j<&yMC_sxCOKappta#mA0yIh~sN@|>Z}Ttj#Jbq_;clqyGG zZ9Xc^P~0bXNXdtDs|AmAnQ!CeOA%}M&8~i4|6o#$_#a2Mlhaa;Z;3i^(sQ=Wot67* z`0hr2-{rhyc@=Z8cw9O|ab<2&JkT}r>seD)vb^;cVqyh36bRTk_&CHEI3S$)-+5Ek ztz22e#KZ&j4$R z>|x{tn-9|nqZzrt8e!HIrRF4pY$z^DF4hMzpw0m?p;m*K?DuU;jf-zc^DuL;aWb%h HgdhL_duwsz literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/devicelibrary.cpp.A6A50BF3BD186A09.idx b/.cache/clangd/index/devicelibrary.cpp.A6A50BF3BD186A09.idx index 43f2673127af9c241ac598a30f720efbec8565c6..0fc983543226aeae7e509ea1db8498fefc1530c5 100644 GIT binary patch literal 9608 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 B`=|f_ literal 4378 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 diff --git a/.cache/clangd/index/global.cpp.DB8A6A1A4BC0BF3A.idx b/.cache/clangd/index/global.cpp.DB8A6A1A4BC0BF3A.idx index f4b33b7f6dcf542f4818e41f347fe32bafb654a7..a64e727c6d5ef1094e038cfdce690dbeb9b4dd9c 100644 GIT binary patch literal 3318 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 HR80Q|0l|yV literal 5460 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 aqhn&@5<mvpL diff --git a/.cache/clangd/index/graphicspipeline.cpp.F94E3ACB17FA6762.idx b/.cache/clangd/index/graphicspipeline.cpp.F94E3ACB17FA6762.idx index db4a4543d1e0e8a4e3e0d56c8a619e77a3f2fbc2..ac3ede35e72e58db8503dc090d0333f988bc7a36 100644 GIT binary patch literal 10508 zcmYjX2UrwI)86idoppC$mNW}U&ZvNqU_w+dV#I)a2F!Yf6I4tn27;)7hynCO`1Dgr z224j#F(*(|1OY`sKtTn?c!K^l-rv*kEc@`*+g)8<-BVp%!?P2oCq+B7i5{N&-=J^SpN zz2`sCZEGK`Jb$Ls#AugYe-_?}tE_YM7H`<3j1#Kp!cmzX_kJKwGtXwg%y+~hTQ z*LWZM&+2{)K8(=>ypPwc$?XxV|MTDMvbxtc$gttxih z{9%XhGP!JgOrD3f*`cMybM+GJ^KVVCE{HZ6b);|U^S}#h`@C^x7v27vHC6pJ>q?b( z5%+ca7Uy*Pnjy{~+}GsJSCkuU4ytNsK9dv@^QCc=&mq%45=U*ga%1Yml^WAaB1S~4 z(WyKBzZ1zxR}YvyX`0$&9qzE-%|sHsdhyJu;I%zR|A~6F^bZYPY;GdqH)3uhwo>cp z>ex!;;9K|!jZF{#xkPTMCDH3B;pHZB$KPN7k`l=x+0Y+udD|ScB&I+sb(H46zX+`g zPF)*%`E-yj=0JUSuDh*Tp{sBp%C{U1cf7tPF<2Mt0`0^(*{PMfN=HIJ%syt9w7qSW zF4hA2BjP?HE44~jB^ozfnxY*MtRJU~b)Z2L;+l}9n$zWMh=!*9_DN+|a`&+k6_{tn znOXk+BIdbF95=-3!|H>q#0+R{BW=syUxcn>-VR-T=~T5Y)&}*@5%(NfsI_&qt%-V@ zaVGkSJCc8BNsOUCt7JR={v!P)L38E?SKCS?K7G;;H(8Y+#PS@&ab#HHe5Ck)&wukz z3E$>mQRz2I*Z%d+zM2{=FV~bS$r`Y{Hmj{mdb7L%W1vNmnUh%$GT*|eB=hNdg)$g0 z6LFcyf-FS2%D{BtRxJjz{7BhI4yU~#;@kP}8ONee zbpYZkV!t9aSs~ZaT2n6A{v#0S2&W?}qWIn{nU;a`HwBD0f*;Y5h*^F)zg$ECC(P3x z+YeSk?`WioMkb`0m%-C6exCg@TtV?JcKMuCzhWKGkczle>iVAjt|`h^PtgYr`dD91Oao+~ z-;p5I^_yeYZ~m$ey~B|z92t;d^6j4{UEFb44a7-=Pf{OQ2VI$Kit-JCNW&e|urryO zsfC}LJO9xLh?|JHiL{BTx|5UM%)dLt1c<#zwHH|vLOa0Y#L^x?0`RE% z)7t{;hwiihA_sFh*o6?%(fsh(JEsL=uGU-|GFkGhNfp22Tv7aW@65GZRte9MM<((i z&0rrPi!9_saKN3~+5f2uvIK1{$fyOG6CWuB`hGLfu z8={%1i-m^UF|!@((S~m^^OoYO8=l{uGRJISsEtUr5t$JiE}tyB9~-jM7Kk#8%dmoI z2(gMhbmqWRdmz3c{corTF-}KMZZph#yaSAR49kyUOVR^28J3@H)Qn<*Tr36&_3mDN}a&uylffqmt#FO`NT$8W$@U2a4Rg zxw}!7y}R{pht49~v#2v=OOQhea;CT(S(GC?iYt&sMSI+UtQwF52_7upjLe&nEjd2Eq$ws{c3u0HS>H@@M-N~W@!gti~jLfPL#19bj z0BI3Jo=QjU_1Gp*x7bBlbHoBd*GvdT#9LkU;{G zg}5vlx!>s}^=?oN?=EHe;drty0?wBcE-bC%+`$rA#uu4oe)CSWFk zn#S^4!&DZVkk{#dU96jDXeQ!HXnTaPkn zm_Ters;$VJxaV0l3j47psXwSr$4olbrK+cB+?r>;$7~{iqXF(Dn#o!TlJ8fFqRZQ^5=x5c(9irlc9iYyDudteU{O_MzAF=gW82{4aD z%q7wt0uc^#-zomzX1gilr@xp8CS1bICAu2gtNL&1x7xrTh%H!u3-%Ac$<-W-ISv%fwV&%k(Vymj+EcU%*=|Bk6h|V9NYt+HUSziyIa59b z*{7g(+ES5qD(X!5bH10(u3t0%KVaz|B-?}f6H5aJ-(Tfdi&VpsxiS>5UWq@=5>orq6&gpFE);z~K zpy4kh`wI;qv-;C`U98XCviU&x>-u*i;-lmHKYQPpx&XxK*dU!g0wFd*Z-(ZEECr$v zF@?y8^hg~N;q_o~gFqxBE}2H%pd|ajmZ@6HgdSK~Nbf8DPbzC3POn@B#*gMli#IBk zU&XHy5m68KOyLSnZkgt1jc*?awFm~KoFmtTJaSqir)@8j&Je^22q(~ViKJwpM!2dI zHOcQL{~e%kSq|+hFs{HnS)<-H*Ge7tMK1^24kF8g?YC1hvPwo!%=!0c$L&$a+tl0& z(6Arj{m7meTy_2SGV`gUR{{}*jH6H|LO2^(mTq12Qy>-_E_Nj1q+yentume&0^(fE zR8;BxZ2a-W%H{2C)a_iQ!$fDgAvPb zk}{j5;^AZ(d@cU`O1n_d@ER#!qmCr^4NiNQ7auhv6auG}sg)%Sm6>QrCVjkwJa6E4 zZyi4Zg(<_1m6EpvkAzYXgfA=lt_6gpzfMuT@yIB1da zHTd&Lah_fhH25;4C~J@3BE?&zMOI9MZ$pYUq(zoOgO9|DNUTL1qrpc>6;ViZ9}dyX*|ij|8I!cN{E6YE|2eiHC#6M1gop_bIMq8A6_0E_Qi% zQV?e&gKS#e_^R@5Fpj@}8xW{fw} zi;2#s%ki6g&)5l8#$zU)5-k4_Gao6g$jcj6_cUP_Xo$h^5pQoN(@*%$D{0s*5D2_L z{bJ|qwDr)bJwVhT?HXiGHk0G(6U`5wwFtyMq}qqXddQTNB)9m#`|Jba4p!cwcZ?4f zkH0+IK1?8PW94m1Y=0A{&aXTo5NDC>EKM@W;zMagsKnADg1gLJEH<%xZ&_~g;FuKzn5VzvB1jmu7<86 znl$Qa@IMbv9)v+NkUE3LQP*L8Uq$64!DxIQhK~t(Y9Ux*MG4)BUFxUBYF0KTGc0c} zvu~Heo&$i@cQG;`7|J<=)0=4}d`Qu(-7 zKFtS(dWYjZ+=sfc2s;+F$0gXM1bY$QWkf;RquKGPFv3H`Jfy|Zc>n5}*DpT_#0$*5 zz^0@}*7>kYtAqC+2I2>j{h+0e=vPhNOK%z-fg`>VSvMkQ>hosg(u{hOm?0F+t-jK7 z((w_X z^INV!)F6i%-e-Z&`^yO)yRZs_;TudhgCm)Gk|!C@l&i#G#se7a>2ioeijgeRfEOn*l2WM zShqyOEEtiq;q1v&0rlkE2y*9*A3RH`5&G^xcn7UZ-|%k=4qRJ*0*E@e8oMw!A5ew*hzT`#CeFxLt+~IK&K|MDt_u|ATA>2A`MLX7Ui|aR#cw> zVhkQ5mJ8)e6Ti!ETb~7^Gcl7%CkcTKGiNFOtenR91e^!)Mr^&278|q`J8JEQ#|p$j#2uuiQybk;k^a@S0`UMVAJE+7 zOW(@a(svGj1MwN*&&ZTK;8vZVtTg}Qqd?rn%DXh67@V5vvhSEjJ`h(CzDma^d97Yi z_+^1WL?TrrE!maswCgw=l?%isq~1hd?)X-g1%1!Xy$D1Yl7&%KyZf)Z^0fHFMF?8? z$T`1#m`cDV3D}Wr7vV9s%WuB{?_uM6*q-u5*tn=YF2NQh*opF=u*oN?ujahY?fMj> zOJLF8SpGMyge2uH`l*-4T?WG3%DfXfiiU5yY<42ewgALA2gl8GdL=AVwVy@ zJWe*wlSJz=9nMx24SFevTaZHw>Pt39R@6I%OReEeAlBpcVvaSa^-`Fvhruln50VY? zB5G#Lp6R30XNVxajhNds!**ERZP{+yP=R=h;p0talhJk4(~bT@bigax(`%Wzv-mmE*~GC&Y7)LO`s z$*(-)H>)gn=_3#~BixL563y37dEc_~WWUEi6k}XW^E$owcggwAs~>}fNtjEbCkV^` zgSmewo?elYZu(+_&@crvDcFp73BrPu*(eq9nOR?b7M1@LhPsXzSWaTx%f6HU8l2-_ z0z?YpQfSuJtE*vH$LW`!0Pz|Pc#XVC;C9T4|K_|ey%fegh~)?Ak<0QwvHT~+7kqZF z${J8#hBf$Jmc7KPrv~q8=_+O&>Yv-~@~&$<1#KCa$)I-+;pG-{hT{FVkFQv-x8y0< zvq8N<+;AUj>`OYa_2nRLK(YpULdlbDo30VIEr=tKEP~dR zR`jjE@x15z3NXZ%_Z1^Pyfxuhiio7@GM0DJbkZWvB+GZ#>@L2Vfxe<@hV;dle8d$S?-^ zl1X*>@$h8R$k>;V)3hK(3o;~6sc_fs@f~?l+=}d5Q7?+ar552*@rAFs_C}Ab@_R4k zEU&}qn2?yo@(!GX35j?t+%mcI^z4Ha0C8pQ@ms{br6)ZLw@j`Lnb1KaF&EiB@I^_v zD5)3-y?ftvSY5QX8m9RO<45!*B=G~>oc{e!3bGta?~TuVJvg@(dd$?CsY~4QD3o8g zPV%@8mUIVZcF=cXEdLHO?8v(5*G09>&%;(YGLD zpIXr9zWzW`Jxr+pGX?Y*Dz3Y-G{^ICy`~0K$vqSB0HR0(N(;_u^zF0;L^snHG$d$1 z72Wew`}VN#;ZpH!w)>%kq3fi&uVF+vD>o(uqlzgRgGU_n6~xyNca1(U#ZzOq1Qxz~ z1B71}KQYu7erubo`RiaKh$rbz65pu>PyV4b@3YQZSc|=w+e@oBLgkwKO7WR8kB~-* z`aSeNge(rx0#}8s)7`=kmI84Rxn4xxWSJ9&ZBQB<*w_R_4rX#_pntw`O2x!WF#?f| zx@05qR4X)RQm$NB(G12!V=fxI5g$Sj!CV8yMKcvW_w;OR1`XEzti8w%cu^g_b;7<* zAE19S=8|aDAHeS99vKUrS2%e+A+lR==Yc8egy5SMv8C5r_yZi=cOV-Juf>mwCs11L7WH z?$Mm`&q)pw?_M}B5cL?>({ruFpmJno$}@pjqP0Xkz$$8&wzyU1d;I50|OTR1H^8m+D)qmq-?68`2BBA^aAW`EIDPqZPF0BPO3FjTSLcPGd(+Y6IdlGB{1s|7ENC-#5AQunitE zc^A18+1n>|{3@Ofi}(rc%W$tUT8h1}=drItUbR4+#vM=7?69C;7xwBRTe#BmTd{mA zJ&9TV4VJ&5*x|EA-~+p9zd*xAWVw;P^c>!--LD^8{i$hL5=Sg61p=6zYq?L9>E~ z2!E)BuYZ4x$R84kq4+1_{TrnXPg@th)Ku#m7#d0RMM`2o|D3gW_9AV73YNv19b{4s J#zKyi{|8h|ya)gQ literal 10476 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 diff --git a/.cache/clangd/index/render.cpp.657B8B8CBD5B3B6B.idx b/.cache/clangd/index/render.cpp.657B8B8CBD5B3B6B.idx index f41648363a3a786287c179a5af6282feadefed9f..2862aaf4ba1d1ffe01208f7d5f3971cb9048e7ec 100644 GIT binary patch literal 7400 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 n*5rZ5v*8|<+@lrusNfza&Pjj1O>qo493J3 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 Qwp8>QFtRhSg9IP|0R1hXzW@LL delta 507 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 literal 10590 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 diff --git a/.cache/clangd/index/texture.h.712506A996DB5236.idx b/.cache/clangd/index/texture.h.712506A996DB5236.idx index 5c234698cfabb8ea5644a71a0f4acfc06eabd691..b951bb4e489284d58103c3f78adeba583e20560b 100644 GIT binary patch literal 962 zcmWIYbaUIq%)sEB;#rZKT9U}Zz`!63#Kk2=nYVy6GZO? zsk!|fH{0!0?cIFG>mGB6Sf41{{_l6IUh~p7mm2lnH_J7uY(Ad8lIyX^wg+aOm&Bih zTvgQnz!xle?%^ZbKC=h>Uyl8VcpPr+$7CwEGs9}#AJgA2-$Y&zx;VjY!Um4p9+9$d zoqT4#t>uv^RFY#a6L@#!)kaCZz~&|APPO*k%1oHPa&;~L+5cNkf8V$N&8(>wRx9P6 ztlMT@eDT??n`Y8QJ1hE9^Lqb%nb^K$v98(zo6lcbm{n${KKfnLS(J z{W>HknANtg5n^J2NptdXD!`<_PYTadZ2xtHiAezBR|Xz7E;cc!@eH@wv`(M>sQ6BZ zi4UfmPlylhI2~!%Wl0_xe}$MhVA8yNyvi`c8H!TVibasZmyr`3t}s8r!WAeC3Qw3Y zEIfh2pm2l7!+tQVXieF&f3iS_YCL~AxScBqyR7<04Zw$XaE2J literal 858 zcmWIYbaM-0W?*nm@vO*AElFfyU|9rFe3v)#hkelHgX+u5O8_ly~l3u zf~Ez%U2AjnCZ9g^Oz%zXqJMjZk_9(jERy@&C0Tq(_dC~PktrLUrq5;$dUI9Lw_sIH z^rs(9=Xzet$gh0MlBKm|%}2Y>&)?i#6B!VZJ^RKXu5JU?*;j5Z_%`+io*{!FR z`Ep&4l>ON4elok?Sbnd#GB?Qr=x(;7r`XsGr!WaIF$n;@0tDQALVRir91xCtds(12 z|2uvmCSI7dpqQW%Oj^?6r(V@&(_kScR+u!G5Eopx@$aV_mcKMh7Gh$9NplNvtHN}5 zi17){%+%{bgLPi3O&gQ;1Uorr)naa)McH z`x+r8W|%aG5Qhp(`un8tJjM23N0^xSAf931X60fPgBs6pn@#KV*^i3vgqV0>x_QNT z;f~Xhc3qa_k?~iEi5(`*BgCT)GrTA@t@tm{SXlTma)QGR<|SCT0fj-~1rvVG{Nv&T z{cnZE;a@u|9|a gi8>IAf&1i~FALvAhbJ*}a&a(lfyKZCG--j@0Q@-Sv;Y7A diff --git a/imgui.ini b/imgui.ini new file mode 100644 index 0000000..9c0d03e --- /dev/null +++ b/imgui.ini @@ -0,0 +1,8 @@ +[Window][Debug##Default] +Pos=60,60 +Size=400,400 + +[Window][Agnosia Debug] +Pos=98,111 +Size=494,375 + diff --git a/src/agnosiaimgui.cpp b/src/agnosiaimgui.cpp new file mode 100644 index 0000000..482fcc3 --- /dev/null +++ b/src/agnosiaimgui.cpp @@ -0,0 +1,19 @@ +#include "agnosiaimgui.h" +#include "imgui.h" + +namespace agnosia_imgui { + +struct { +} ImGuiSettings; + +void Gui::drawTabs() { + if (ImGui::BeginTabBar("MainTabBar", ImGuiTabBarFlags_Reorderable)) { + if (ImGui::BeginTabItem("Graphics Pipeline")) { + ImGui::Text("Test"); + ImGui::EndTabItem(); + } + + ImGui::EndTabBar(); + } +} +} // namespace agnosia_imgui diff --git a/src/agnosiaimgui.h b/src/agnosiaimgui.h new file mode 100644 index 0000000..4b4624c --- /dev/null +++ b/src/agnosiaimgui.h @@ -0,0 +1,11 @@ +#pragma once +#include "global.h" +#include "imgui.h" +#include + +namespace agnosia_imgui { +class Gui { +public: + static void drawTabs(); +}; +} // namespace agnosia_imgui diff --git a/src/devicelibrary.cpp b/src/devicelibrary.cpp index 62c6907..80478fb 100644 --- a/src/devicelibrary.cpp +++ b/src/devicelibrary.cpp @@ -1,4 +1,5 @@ #include "devicelibrary.h" +#include "global.h" namespace device_libs { @@ -162,6 +163,36 @@ VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR &capabilities, return actualExtent; } } + +VkSampleCountFlagBits getMaxUsableSampleCount() { + VkPhysicalDeviceProperties physicalDeviceProps; + VkSampleCountFlags maxCounts; + vkGetPhysicalDeviceProperties(Global::physicalDevice, &physicalDeviceProps); + + VkSampleCountFlags counts = + physicalDeviceProps.limits.framebufferColorSampleCounts & + physicalDeviceProps.limits.framebufferDepthSampleCounts; + if (counts & VK_SAMPLE_COUNT_64_BIT) { + return VK_SAMPLE_COUNT_64_BIT; + } + if (counts & VK_SAMPLE_COUNT_32_BIT) { + return VK_SAMPLE_COUNT_32_BIT; + } + if (counts & VK_SAMPLE_COUNT_16_BIT) { + return VK_SAMPLE_COUNT_16_BIT; + } + if (counts & VK_SAMPLE_COUNT_8_BIT) { + return VK_SAMPLE_COUNT_8_BIT; + } + if (counts & VK_SAMPLE_COUNT_4_BIT) { + return VK_SAMPLE_COUNT_4_BIT; + } + if (counts & VK_SAMPLE_COUNT_2_BIT) { + return VK_SAMPLE_COUNT_2_BIT; + } + + return VK_SAMPLE_COUNT_1_BIT; +} // --------------------------------------- External Functions // ----------------------------------------- // void DeviceControl::pickPhysicalDevice(VkInstance &instance) { @@ -180,6 +211,7 @@ void DeviceControl::pickPhysicalDevice(VkInstance &instance) { // Once we have buttons or such, maybe ask the user or write a config file // for which GPU to use? Global::physicalDevice = device; + Global::perPixelSampleCount = getMaxUsableSampleCount(); break; } } @@ -378,6 +410,7 @@ void DeviceControl::destroyImageViews() { vkDestroyImageView(Global::device, imageView, nullptr); } } + // --------------------------------------- Getters & Setters // ------------------------------------------ // VkFormat *DeviceControl::getImageFormat() { return &swapChainImageFormat; } diff --git a/src/entrypoint.cpp b/src/entrypoint.cpp index f98d6c7..7a95159 100644 --- a/src/entrypoint.cpp +++ b/src/entrypoint.cpp @@ -1,5 +1,9 @@ #include "entrypoint.h" #include "global.h" +#include "graphics/texture.h" +#include "imgui.h" +#include "imgui_impl_glfw.h" +#include "imgui_impl_vulkan.h" VkInstance vulkaninstance; @@ -88,6 +92,7 @@ void initVulkan() { buffers_libs::Buffers::createDescriptorSetLayout(); graphics_pipeline::Graphics::createGraphicsPipeline(); graphics_pipeline::Graphics::createCommandPool(); + texture_libs::Texture::createColorResources(); texture_libs::Texture::createDepthResources(); texture_libs::Texture::createTextureImage(); texture_libs::Texture::createTextureImageView(); @@ -126,6 +131,10 @@ void cleanup() { render_present::Render::destroyFenceSemaphores(); graphics_pipeline::Graphics::destroyCommandPool(); + ImGui_ImplVulkan_Shutdown(); + ImGui_ImplGlfw_Shutdown(); + ImGui::DestroyContext(); + vkDestroyDevice(Global::device, nullptr); device_libs::DeviceControl::destroySurface(vulkaninstance); vkDestroyInstance(vulkaninstance, nullptr); diff --git a/src/global.cpp b/src/global.cpp index a5cb654..1802144 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -5,6 +5,7 @@ namespace Global { VkSurfaceKHR surface; VkDevice device; VkPhysicalDevice physicalDevice; +VkSampleCountFlagBits perPixelSampleCount; VkSwapchainKHR swapChain; VkCommandPool commandPool; std::vector commandBuffers; @@ -16,6 +17,9 @@ std::vector descriptorSets; uint32_t currentFrame = 0; VkImageView textureImageView; VkSampler textureSampler; +VkImageView colorImageView; +VkImage colorImage; +VkDeviceMemory colorImageMemory; VkImageView depthImageView; VkImage depthImage; VkDeviceMemory depthImageMemory; diff --git a/src/global.h b/src/global.h index 1e74944..a829121 100644 --- a/src/global.h +++ b/src/global.h @@ -28,6 +28,7 @@ namespace Global { // enabled first, so that's one obvious global, as well as the glfw includes! extern VkPhysicalDevice physicalDevice; +extern VkSampleCountFlagBits perPixelSampleCount; extern VkDevice device; extern VkCommandPool commandPool; @@ -46,6 +47,10 @@ extern VkDescriptorSetLayout descriptorSetLayout; extern VkImageView textureImageView; extern VkSampler textureSampler; +extern VkImage colorImage; +extern VkImageView colorImageView; +extern VkDeviceMemory colorImageMemory; + extern VkImage depthImage; extern VkImageView depthImageView; extern VkDeviceMemory depthImageMemory; @@ -53,8 +58,8 @@ extern VkDeviceMemory depthImageMemory; extern VkSwapchainKHR swapChain; extern std::vector swapChainImageViews; -const std::string MODEL_PATH = "assets/models/teapot.obj"; -const std::string TEXTURE_PATH = "assets/textures/checkermap.png"; +const std::string MODEL_PATH = "assets/models/viking_room.obj"; +const std::string TEXTURE_PATH = "assets/textures/viking_room.png"; const uint32_t WIDTH = 800; const uint32_t HEIGHT = 600; const int MAX_FRAMES_IN_FLIGHT = 2; diff --git a/src/graphics/graphicspipeline.cpp b/src/graphics/graphicspipeline.cpp index 58f2ba2..923b488 100644 --- a/src/graphics/graphicspipeline.cpp +++ b/src/graphics/graphicspipeline.cpp @@ -2,6 +2,7 @@ #include "imgui.h" #include "imgui_impl_vulkan.h" #include "texture.h" +#include namespace graphics_pipeline { @@ -149,8 +150,7 @@ void Graphics::createGraphicsPipeline() { multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; multisampling.sampleShadingEnable = VK_FALSE; - multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; - + multisampling.rasterizationSamples = Global::perPixelSampleCount; // TODO: Document! VkPipelineDepthStencilStateCreateInfo depthStencil{}; depthStencil.sType = @@ -295,8 +295,11 @@ void Graphics::recordCommandBuffer(VkCommandBuffer commandBuffer, const VkRenderingAttachmentInfo colorAttachmentInfo{ .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, - .imageView = Global::swapChainImageViews[imageIndex], + .imageView = Global::colorImageView, .imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + .resolveMode = VK_RESOLVE_MODE_AVERAGE_BIT, + .resolveImageView = Global::swapChainImageViews[imageIndex], + .resolveImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, .storeOp = VK_ATTACHMENT_STORE_OP_STORE, .clearValue = {.color = {0.0f, 0.0f, 0.0f, 1.0f}}, @@ -306,7 +309,7 @@ void Graphics::recordCommandBuffer(VkCommandBuffer commandBuffer, .imageView = Global::depthImageView, .imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, .clearValue = {.depthStencil = {1.0f, 0}}, }; diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index aecdd1b..e95140f 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -4,10 +4,9 @@ #include "graphicspipeline.h" #include "render.h" #include "texture.h" -#include #include -#include +#include "../agnosiaimgui.h" #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_vulkan.h" @@ -19,6 +18,8 @@ std::vector renderFinishedSemaphores; std::vector inFlightFences; VkDescriptorPool imGuiDescriptorPool; +static float floatBar = 0.0f; + void recreateSwapChain() { int width = 0, height = 0; glfwGetFramebufferSize(Global::window, &width, &height); @@ -37,6 +38,7 @@ void recreateSwapChain() { device_libs::DeviceControl::createSwapChain(Global::window); device_libs::DeviceControl::createImageViews(); + texture_libs::Texture::createColorResources(); texture_libs::Texture::createDepthResources(); } // At a high level, rendering in Vulkan consists of 5 steps: @@ -123,28 +125,23 @@ void Render::drawImGui() { ImGui::NewFrame(); // 2. Show a simple window that we create ourselves. We use a Begin/End pair // to create a named window. - { - static float f = 0.0f; - static int counter = 0; - ImGui::Begin("Agnosia Debug"); // Create a window called "Hello, world!" and - // append into it. + static int counter = 0; - ImGui::Text("This is some useful text."); // Display some text (you can use - // a format strings too) - ImGui::SliderFloat("float", &f, 0.0f, - 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f + ImGui::Begin("Agnosia Debug"); // Create a window called "Hello, world!" and + // append into it. - if (ImGui::Button("Button")) // Buttons return true when clicked (most - // widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); + ImGui::Text("This is some useful text."); // Display some text (you can use + // a format strings too) + ImGui::SliderFloat("float", &floatBar, 0.0f, + 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f + + agnosia_imgui::Gui::drawTabs(); + + ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", + 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); + ImGui::End(); - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", - 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } ImGui::Render(); } #pragma info @@ -202,6 +199,9 @@ void Render::destroyFenceSemaphores() { } } void Render::cleanupSwapChain() { + vkDestroyImageView(Global::device, Global::colorImageView, nullptr); + vkDestroyImage(Global::device, Global::colorImage, nullptr); + vkFreeMemory(Global::device, Global::colorImageMemory, nullptr); vkDestroyImageView(Global::device, Global::depthImageView, nullptr); vkDestroyImage(Global::device, Global::depthImage, nullptr); vkFreeMemory(Global::device, Global::depthImageMemory, nullptr); @@ -273,6 +273,5 @@ void Render::init_imgui(VkInstance instance) { }; ImGui_ImplVulkan_Init(&initInfo); - -} // namespace render_present +} } // namespace render_present diff --git a/src/graphics/render.h b/src/graphics/render.h index 975d6c7..88e3f8d 100644 --- a/src/graphics/render.h +++ b/src/graphics/render.h @@ -10,5 +10,6 @@ public: static void cleanupSwapChain(); static void init_imgui(VkInstance instance); static void drawImGui(); + static float getFloatBar(); }; } // namespace render_present diff --git a/src/graphics/texture.cpp b/src/graphics/texture.cpp index 052ff2a..a18d53c 100644 --- a/src/graphics/texture.cpp +++ b/src/graphics/texture.cpp @@ -1,4 +1,3 @@ -#include #define STB_IMAGE_IMPLEMENTATION #include "texture.h" #include @@ -12,7 +11,8 @@ VkPipelineStageFlags destinationStage; namespace texture_libs { void createImage(uint32_t width, uint32_t height, uint32_t mipLevels, - VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, + VkSampleCountFlagBits sampleNum, VkFormat format, + VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags properties, VkImage &image, VkDeviceMemory &imageMemory) { // This function specifies all the data in an image object, this is called @@ -29,7 +29,7 @@ void createImage(uint32_t width, uint32_t height, uint32_t mipLevels, imageInfo.tiling = tiling; imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; imageInfo.usage = usage; - imageInfo.samples = VK_SAMPLE_COUNT_1_BIT; + imageInfo.samples = sampleNum; imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; imageInfo.mipLevels = mipLevels; @@ -309,8 +309,8 @@ void Texture::createTextureImage() { stbi_image_free(pixels); - createImage(textureWidth, textureHeight, mipLevels, VK_FORMAT_R8G8B8A8_SRGB, - VK_IMAGE_TILING_OPTIMAL, + createImage(textureWidth, textureHeight, mipLevels, VK_SAMPLE_COUNT_1_BIT, + VK_FORMAT_R8G8B8A8_SRGB, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, @@ -395,11 +395,24 @@ VkFormat Texture::findDepthFormat() { VK_FORMAT_D24_UNORM_S8_UINT}, VK_IMAGE_TILING_OPTIMAL, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT); } +void Texture::createColorResources() { + VkFormat colorFormat = *device_libs::DeviceControl::getImageFormat(); + VkExtent2D swapChainExtent = device_libs::DeviceControl::getSwapChainExtent(); + + createImage(swapChainExtent.width, swapChainExtent.height, 1, + Global::perPixelSampleCount, colorFormat, VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, Global::colorImage, + Global::colorImageMemory); + Global::colorImageView = device_libs::DeviceControl::createImageView( + Global::colorImage, colorFormat, VK_IMAGE_ASPECT_COLOR_BIT, 1); +} void Texture::createDepthResources() { VkFormat depthFormat = findDepthFormat(); VkExtent2D swapChainExtent = device_libs::DeviceControl::getSwapChainExtent(); - createImage(swapChainExtent.width, swapChainExtent.height, 1, depthFormat, - VK_IMAGE_TILING_OPTIMAL, + createImage(swapChainExtent.width, swapChainExtent.height, 1, + Global::perPixelSampleCount, depthFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, Global::depthImage, Global::depthImageMemory); diff --git a/src/graphics/texture.h b/src/graphics/texture.h index 3bfa48a..615fdde 100644 --- a/src/graphics/texture.h +++ b/src/graphics/texture.h @@ -1,20 +1,21 @@ #pragma once +#include "../devicelibrary.h" #include "../global.h" #include "buffers.h" -#include "../devicelibrary.h" +#include namespace texture_libs { - class Texture { - public: - static void createTextureImage(); - static void createTextureImageView(); - static void createTextureSampler(); - static void destroyTextureImage(); - static void destroyTextureSampler(); - static VkFormat findDepthFormat(); - static void createDepthResources(); - - // ------------ Getters & Setters ------------ // - static uint32_t getMipLevels(); - }; -} +class Texture { +public: + static void createTextureImage(); + static void createTextureImageView(); + static void createTextureSampler(); + static void destroyTextureImage(); + static void destroyTextureSampler(); + static VkFormat findDepthFormat(); + static void createDepthResources(); + static void createColorResources(); + // ------------ Getters & Setters ------------ // + static uint32_t getMipLevels(); +}; +} // namespace texture_libs