From cc111afa83b7bad78e0260d13e3fa95d6b9491dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9au?= <theau.baton@etu.univ-amu.fr> Date: Sat, 19 Oct 2024 02:19:58 +0200 Subject: [PATCH] Add Window class --- .gitignore | 4 +- CMakelists.txt | 10 ++- assets/textures/Cube_Amber.png | Bin 0 -> 1834 bytes assets/textures/Cube_Blue.png | Bin 0 -> 314 bytes assets/textures/Cube_Brown.png | Bin 0 -> 314 bytes assets/textures/Cube_Cyan.png | Bin 0 -> 314 bytes assets/textures/Cube_Dark_Green.png | Bin 0 -> 314 bytes assets/textures/Cube_Grass.png | Bin 0 -> 775 bytes assets/textures/Cube_Gray.png | Bin 0 -> 314 bytes assets/textures/Cube_Grayy.png | Bin 0 -> 1028 bytes assets/textures/Cube_Green.png | Bin 0 -> 314 bytes assets/textures/Cube_Greeny.png | Bin 0 -> 1468 bytes assets/textures/Cube_Inverted.png | Bin 0 -> 314 bytes assets/textures/Cube_Inverted_2.png | Bin 0 -> 314 bytes assets/textures/Cube_Magenta.png | Bin 0 -> 314 bytes assets/textures/Cube_Orange.png | Bin 0 -> 314 bytes assets/textures/Cube_Pink.png | Bin 0 -> 314 bytes assets/textures/Cube_Purple.png | Bin 0 -> 314 bytes assets/textures/Cube_Red.png | Bin 0 -> 314 bytes assets/textures/Cube_Redy.png | Bin 0 -> 1198 bytes assets/textures/Cube_Saumon.png | Bin 0 -> 314 bytes assets/textures/Cube_Yellow.png | Bin 0 -> 314 bytes assets/textures/Cube_Yellowy.png | Bin 0 -> 1393 bytes .../graphics/back/textures/TextureBuffer.cpp | 33 ++++++-- .../graphics/back/textures/TextureBuffer.hpp | 4 +- source/engine/graphics/front/object/Image.cpp | 2 +- source/engine/io/Window.cpp | 74 ++++++++++++++++++ source/engine/io/Window.hpp | 31 ++++++++ source/main.cpp | 37 +++++---- 29 files changed, 161 insertions(+), 34 deletions(-) create mode 100644 assets/textures/Cube_Amber.png create mode 100644 assets/textures/Cube_Blue.png create mode 100644 assets/textures/Cube_Brown.png create mode 100644 assets/textures/Cube_Cyan.png create mode 100644 assets/textures/Cube_Dark_Green.png create mode 100644 assets/textures/Cube_Grass.png create mode 100644 assets/textures/Cube_Gray.png create mode 100644 assets/textures/Cube_Grayy.png create mode 100644 assets/textures/Cube_Green.png create mode 100644 assets/textures/Cube_Greeny.png create mode 100644 assets/textures/Cube_Inverted.png create mode 100644 assets/textures/Cube_Inverted_2.png create mode 100644 assets/textures/Cube_Magenta.png create mode 100644 assets/textures/Cube_Orange.png create mode 100644 assets/textures/Cube_Pink.png create mode 100644 assets/textures/Cube_Purple.png create mode 100644 assets/textures/Cube_Red.png create mode 100644 assets/textures/Cube_Redy.png create mode 100644 assets/textures/Cube_Saumon.png create mode 100644 assets/textures/Cube_Yellow.png create mode 100644 assets/textures/Cube_Yellowy.png create mode 100644 source/engine/io/Window.cpp create mode 100644 source/engine/io/Window.hpp diff --git a/.gitignore b/.gitignore index 6013f5a..e2a14a6 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,4 @@ build/* include/* library/* vcpkg_installed/* -old/* - -assets/textures/* \ No newline at end of file +old/* \ No newline at end of file diff --git a/CMakelists.txt b/CMakelists.txt index 4ed6f26..ed662f7 100644 --- a/CMakelists.txt +++ b/CMakelists.txt @@ -24,7 +24,7 @@ set(CMAKE_CXX_EXTENSIONS OFF) if(WIN32) option(CMAKE_TOOLCHAIN_FILE "C:/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake") elseif(UNIX) - option(CMAKE_TOOLCHAIN_FILE "/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake") + #option(CMAKE_TOOLCHAIN_FILE "/amuhome/b20017738/Bureau/vcpkg/scripts/buildsystems/vcpkg.cmake") endif() #============================================================== @@ -35,8 +35,8 @@ set(SOURCES ${CMAKE_SOURCE_DIR}/source/) set(LIBRARY ${CMAKE_SOURCE_DIR}/library/) set(INCLUDE ${CMAKE_SOURCE_DIR}/include/) -set(VCPK_INCLUDE ${CMAKE_SOURCE_DIR}/vcpkg_installed/*/include) -set(VCPK_INCLUDE ${CMAKE_SOURCE_DIR}/vcpkg_installed/*/lib) +set(VCPKG_INCLUDE ${CMAKE_SOURCE_DIR}/vcpkg_installed/*/include) +set(VCPKG_LIB ${CMAKE_SOURCE_DIR}/vcpkg_installed/*/lib) #============================================================== # Build @@ -59,6 +59,10 @@ set_property(TARGET ${CURRENT_TARGET} PROPERTY RUNTIME_OUTPUT_DIRECTORY $<1:${CM target_include_directories(${CURRENT_TARGET} PRIVATE ${INCLUDE}) +#list(APPEND CMAKE_PREFIX_PATH "/amuhome/b20017738/Bureau/vcpkg/packages/glew_x64-linux") +#list(APPEND CMAKE_PREFIX_PATH "/amuhome/b20017738/Bureau/vcpkg/packages/glm_x64-linux") +#list(APPEND CMAKE_PREFIX_PATH "/amuhome/b20017738/Bureau/vcpkg/packages/imgui_x64-linux") + find_package(glfw3 REQUIRED) find_package(GLEW REQUIRED) find_package(glm CONFIG REQUIRED) diff --git a/assets/textures/Cube_Amber.png b/assets/textures/Cube_Amber.png new file mode 100644 index 0000000000000000000000000000000000000000..2818dc1c2e2ce58ac8d1c13f1ea554e000ea450c GIT binary patch literal 1834 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 HoD!M<TG3bk literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Blue.png b/assets/textures/Cube_Blue.png new file mode 100644 index 0000000000000000000000000000000000000000..660ea2bcf6a491b02d8245636432892a96cac429 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tp1V`QbYeQ-~BJj`b=%he+CAI44pM;3=9lxB|(0{ z|3QFZ^Zq6K85kHi3p^r=85sBugD~Uq{1qt-3=H!<T^vI!{NG;k6gsTH;}Y0(_V0R` ztyg9l>}#x^=<s)Yp=k0}UdjHL-F+V?mj>xg+vxRZhNSl)=kqg!|5m4+>G(6pm`!Q^ z(c6VT-kkhg7<|Aq{^T6<17Dp~?z5;bvOMTFLwkiv5xbw)Jw}hy{t7LvzZ-lHs98<u z2|vDUwZrPYSz(b)6<2?WA8CBb;K@^=cYxF38C%Z-#m}p<#V5?W{)_q7LhiTg_T5~{ Qz`(%Z>FVdQ&MBb@0Eg&&wEzGB literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Brown.png b/assets/textures/Cube_Brown.png new file mode 100644 index 0000000000000000000000000000000000000000..6625a70ebf229d0bd2531ebd3723c97dcac377d0 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tp5|T^24m!Gwss@EIP9t7#J9i7X;KWFfg!{1o;L3 z2LXo7`<LuzU|`@Z@Q5sCVBk9p!i>lBSEMj7FwFOKaSXBWe|yPO=&%BhOJLL4zw2eT zUYTXEud#Zf!{6<NqRCr%CHrG`_kEmP8l*REqt~MulHP}$&(9G4Tb*{M<IfypHl_JT zZx{Y}bMkXx@B!2KlXJ`ue05T}&!WD_@}S=g?G-9T?0#PN7(Gt=E3~x!Zty*zW;LNF z{P?of4y*TOg+(@1T>T|}r12?(Cr^dm0ZxZ!Y&{PYKd;IbpD^$GFXmqhx!<nacXKHN P0|SGntDnm{r-UW|06BT~ literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Cyan.png b/assets/textures/Cube_Cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..e154c1b9291be5f26b3735e77279271177ba376a GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)DWoy!Sp>^!|<Iyc=b=UNA5)7^bh4Wnf@nD+%%o z{tp5SoA)o-&%nUIS>O>_%)r2R7=#&*=dVa%U|^W<>Eak-;s5rMr_f;q9+$wTvwzpi zY`rqeU|(bPM2ElI3q_N+@=Er{?C$$Gxim;`+D5NOGbFtaIiH^){I@#oOvj%&#%xOS zkKQi)@#f^`!r%j@@h9h)ANcB|a-T(gk>x?Z8QLpUirD?U?lF3t_E%_W{oUYuK+S4G zPx$d=s~uMF%?gWbs<`?~{7B<d22Y*}y#t&M&)9k%D1Kg*Ek0r1^<T`t7IME`x9{ds Q1_lNOPgg&ebxsLQ04ceBVE_OC literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Dark_Green.png b/assets/textures/Cube_Dark_Green.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e446677e0be7233a32d5f4436d2b1b7df8d14d GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tm=~zmAj(lR~4z$hsdujWnf^)J(n?wfq{XoB*-uL zKL{{v-oIo&0|NtRfk$L90|Vb-5N14{zaoW!fnmO<i(`m||JzHRLWdQ2TmqZU{#`G# z^~x-ReT~%<9sX`F6iwdBE7>2jyYJ)V(jdKQ8@(RQkn}#}e13-T-|Dn89e?H+vnkC# zdb{w)o0FdlgAbU-pPXZU;H#6$eHQgamIwW2Xs=KyV)yg9$LMj|U!kS-cZ2T%HLD3d z;m4P)c38bPD=f09;_5H)BaKfPJb5bg4sbd=W9xaK_<2>f_=I`ae=+}B$o+QRzMD%K Q7#J8lUHx3vIVCg!095vRR{#J2 literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Grass.png b/assets/textures/Cube_Grass.png new file mode 100644 index 0000000000000000000000000000000000000000..bf967e698b61604ff8428348c9ad2d9d3b0e8538 GIT binary patch literal 775 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@t_JvoxH2#>w5$zkToKT<HKb`(K-ad=+Qoit>x1f-`M0hM zYFO^yu_?HHV{pgj;O13<&8q{e7x}hr2=3S%(y}(NV^c`us(_|df!*6eJGX??Ec9(y z;orEzziD+~<s9$sZ6UQw{Mt7JcWnu&U+O>UU}XJr|K>G;otr~y7WsB;3F+P*+PE^H zcV}4j0^gn;VQm|N%IA0|)?2o%4{ll+FkxRr|DN!cHGzS4`rX^Z8khTbZ4GT%6I8#{ zuPWB9WnEDHGQX~EAq^`78dv()E%9qz8<gGWFs&$@fq|h*Hm-?*fx*2b$S?RmRRF{B zIbrz>3=EtF9+AZi419+{nDKc2iWCM0#tcsv#}EtuvzKlLH5)LrK5V%l#1u7oOG7DR z@<F|@jaheJ<^BHGpTd;rx%c(d=Zji??tjT+%qX4g;3xmJC!AqHYtG~?aSR(0mcLeb zv(2-XrD2EMH`z_w?^`e6y~xgB@Hnhqpk<o0tWtVK$izpC4fSv4%{g{ba^b!g^ZPlz zE=u%#(tk#C+oCr~IX@i*ge1P(OyRmQUqi{hduPjn3I3i&yXSPTelyE2q1=9EK~C}4 zn?D`yDC|0rcYLN$opgG+!M^f<rsXCnJ6TTKEMNJ6pU3W&|372DmnNNi#F><*J=bQP zHpyVU`kFJ%N*^vWeu=vu^iA)x7qhF~jTv>1Qr@+!<FK45x|6Z%hO&A|lYW!f{a5Et zn>q;Ims?i+=%dwa2f-r(IZtyJbWHru<XLj@HshZci?%aIyk7L(|G+eZ#xt+3y$oB! z+ZA;$EB2{W!2MT`0w;4#*~!MM={PldffAR=O$OCS=}K;mq-STJiC3~6RMS#F6wJWD Oz~JfX=d#Wzp$P!U2zoRC literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Gray.png b/assets/textures/Cube_Gray.png new file mode 100644 index 0000000000000000000000000000000000000000..a2057bc9e04b33cb9e494f72a35d2693da1e0047 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)DWo=Fgvh<Hn7)wzhry_AxLp1nex!WME)mD+%%o z{tp5SoA)o-&%nUIS>O>_%)r2R7=#&*=dVa%U|^W<>Eak-;s5rMr_f;q9+$wTvwzpi zY`rqeU|(bPM2ElI3q_N+@=Er{?C$$Gxim;`+D5NOGbFtaIiH^){I@#oOvj%&#%xOS zkKQi)@#f^`!r%j@@h9h)ANcB|a-T(gk>x?Z8QLpUirD?U?lF3t_E%_W{oUYuK+S4G zPx$d=s~uMF%?gWbs<`?~{7B<d22Y*}y#t&M&)9k%D1Kg*Ek0r1^<T`t7IME`x9{ds Q1_lNOPgg&ebxsLQ0Ek$9%m4rY literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Grayy.png b/assets/textures/Cube_Grayy.png new file mode 100644 index 0000000000000000000000000000000000000000..405cb6f9309a3775a9d9cfc8137688ac33152514 GIT binary patch literal 1028 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>V_;y|p|&!Rfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#Nsmdb&7<M7YnLep;{8QK0pE zp>%~z@b_vL9v%VyL<K=1MIl3j<fMcIk0T8WC8~M-AN`uY{>QdUZ)E;W4Oz8o_pWQJ z?$wrk%MAVBxo_XT?fnKHe*E|mzxCf9&qs?FFP7;3`t|FFdeKj>pZNUw^eJfX-o5e; z;o;#uz2;_SO8?eQ=<`fHe*XM<Q_G6l+P@ukjT6qEJ=<Z;nHe+X$B!Qt9IDeUteef! z5VkrrH$UI~j>?nUOOB|kt6#l*Ie5Y&#io!$K^~p&-o5+Kb@T3B-gvH+>_YSB&2!uC z`{Y<d=@~;=V=-G>TSGUNrVmReOgoaEp6<xQcu#^+z~ET$1PP;SjZR)SY~z?aZr;A# zZILD?C%34<)i}{}o@)X}&Ze^IiO**B@87@wzequ8X=rb6Z|LL4j};H}b%?6$Y%)mV z(D0gb(mVLflP4)3F6eZ)7Zel-uqsAJMt1&q_fF5u%Vm!Ba)!@u7?0Q=JZ)iZEnWTV z_wU1>E!^DQ@3X#n|Ni=2uPs})h!{F4sHDxk5u?+6f!pJSn4p01H=`tBVd4A!2lBq2 zK7Cs7{=Iw01b=C4VmK~o6I7&n>_=z<gQBsq@%!=z>Jc9vJz8XCZ@+%ovSq7YzI>_g zWW3YN!a{;AF+V?l?(3?1{8Fq_9F9DFni{ic;>3x&6pk6o%E|F1c^Dfmf1#`+FaP5s z-;J5Gbsku`@7}OMAo<#fsV2?A7k+bCRM{kFxwLg2kiNxfZf<_{>(|nbOmo2}_xO7) zdv~o7t`=G#wm_@L<$&5n6)vUEx>^y!Tt?To9t-<?ere~Ob6y7PC3YXnj`XNynz8(W zzv^M-Gf5q~Dk@@6cesQsj&=-u@0j^y<1z`Gq>qPU9(r~K6|A`tIa4FD&9W<TjlT5B z4Pu{XESHJ&+cn|%O@$Ll#Rqi`t^4|PUXMUPp20bm%6nUD(m%z0{_teyantWtnRFBq z?OKb9=Y_KreoK|p*UWw%wY6dE)~&l5y8BM|iYT9J+0)Te+;{KqIm3DL=kqguWqvrd z=lSQ`;p^oE|4fniot5@RyP~kru*=GAgQWmtYwDx2yAS?VDc=e>@$g~d1nss*zjT`3 zv$1SAHfP#L;f+7k95h<;Sz9y~h%_=-Jy~XbeAkTGv$^Aiy4@I^6s@hT18wGWe0=pP z%O?8R8fBLA*ZDG(#AI1HT61!9Sv#42w4GsUYim>5FTC-`R)&QF|9(53QqDLZ%FN8X q@n3Y($8<&~#YgLpykD`Z-f`p0rH}sdr7<utFnGH9xvX<aXaWFgl-V5s literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Green.png b/assets/textures/Cube_Green.png new file mode 100644 index 0000000000000000000000000000000000000000..e863145c801b80978785b3f2a1949f24fc31f2e4 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tp1V`Hone$^JQbrZl6o<dl?uQJ_j5*$iTqBRubeF z{2v4uHt%1upMimav%n*=n1O-sFbFdq&tH+kz`!uy)5S5w!vF0hPocvKJT8GvXaBC3 z*?MJ`!M?`oi4K3a7m6lt<(2G@+1>YXa%qs>w2fYmW=MJ;ay~yp_-}REnT|hmjM<dt zAH7}p<ITy>g~10*<4?{pKk(H_<vxr0BFlq*GqhKz6tVkx-DC7P?XS?%`n$pRfST2W zp77(#Ry(ZTn-vz>RB`o}_>sn^44ym{dIvZip0V{jQ2e|qTYSR2>%W+PE#!W?Zr{zN Q3=9kmp00i_>zopr0ArPY!~g&Q literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Greeny.png b/assets/textures/Cube_Greeny.png new file mode 100644 index 0000000000000000000000000000000000000000..7adbb641868ecf1fe99512d0dda3302e63b14abd GIT binary patch literal 1468 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>V_;y|p|&!Rfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#LUsJzX3_BHZVOdw0jW3aooq z{h8gTM#b=)!OSxgI{BHDx)fLx7d$$)UqHl#MU+QKpfpvC(LC$hIu=1@uC7TsBD{7? zN)kPfPR%_czDTk7{mXB^_r0?EF4#WPGxb$jX=!<FeCT(}+DUJ$Qr*vOojEB`^SWsE z?QW(Y%f#i5=3kuuG-v<3n)&Z?g>Qa(!m#h-&-S&~vQ`#pUet`-ZyLJ0=9Tl!Xw^+G zmoVJ>ddHbbEkm_}^F!wnmi;?Ye!tz?|KxVhiMD3OJ)dtb4%?meCtcRImtphu9?ifl zJW4a>PJTM;?f2{U7caQEtSj_Ok2#jCE$YCqZt3Ss%6^`%Z&SFPj2g5X4CPrO1U28- z-?LaQ`Pt={U;U0gd!`3UA8wU~?Q&aS#hCUs+Oae1443wTy$1rkn2rCW%3PVk{_Xkf zbW`<?B@FleUP`{!>lSuxqUk|*zPRHW>Ib=_!wy7qo;+f=#qE-XV)<(3^-cmF&NrIx zguA$>J!}>}6(;)hp;UG7hr^d9bL1wc&U*XgRs{Q@4b`lbS?x0trwa<bzIM0Y(tM7c zTZVeU*T>vuHhYo|@18bgu951(mzRVC%tS&H=FhqD?TFOO3te47r#Z4+nbOn0hP|*$ zd9EtV$P{B+eel}(+U#cQ@6r2`FFM|4^r_);VVb;j4Nr~Dj5Ptuk3<{l{an*Z*DsxF z+qF1g1&1q3MD@I^C%LcZ*QGB$zmL6B_4IcAM@P2TKASIQz42aNOWL;VU0kQP&yeMK zuq0PAIjoJlnc-2(k;kV0{w(U<za!)DR@T$)Vo$ge7bqCScAk`Ua`N7NcEtpjqB~9h zd=hw11V*uLSU2}hrR4nmDR+O$=M)rNymTw~)I5JDjq@$c!qN^5YflHn-)k`BU-IXI zRYjw3Arr&*baCzvA+M(1a;Ymh9v{1j$#;cE)NS*X4#BtkgPb4B25ePbx1xHp;k7q2 zoo{?TkhIV4aG6p?-ARW@YioWkE{*@6@^XRvsx6zY^GGIdnzE5oNx@Ebt<hfnbNy;& zDQUgiTXrRW4)uz8Z*2B$?oHEEcg^ji8?~zU<k)DiD@EV<u(WCKvxs266Jb-t`XXOT zGI*@`y@&Too9@Tg61ojvti)zm@m*LwnYmi?cMP-hYthY27dE#E>z=k>$<leT@8x9^ ziQ|pwj_IK)g<hH4L)YeBOxhp2amD_Vch=iwFWINxS7!Xts`7M%$o;tO(u^@eOmjl# z	Sk&HKqZF#oSO~^R?rs6Hvb-A3WdCuKWSqeHbSXZz~FZiuCvv{|SftX7|r_;)- z7J2(6)D@0CcDl{$c~OhqNwgsL(|oqV_TBPQ(Lzruwi-#ZtlRYR`x}=nj4hwMwly9< zTic__v}<*=D9f4Z+1(edCOXDThR+dZE&L$qaAbnM$uW`H9}^seqmzE?e~VPv!^M(n zf5PSd>MIS>4_$Vz<lWi!*^qzRl;n)R%}1_olrpKWtNhx-RHQKFK%V)Bm02vDKUqz3 zxa1EQZ+>>@S^8_U#`bCL%)fvCxUJOSq4zO!o4fpC)_C0=Mx~Vpo@H;@@3SoG$K{8q zYaY$*Z;#D){PJVZ>kCy(jw<g@e0$&hUMTI8?}~d<SSHS%Z`ZZp-^!;8-X2a`ceY&q z!md7+O5;b{nib_$w>>zeoqpy1ht(Bvzt%rlF84-zLB0)xv|W@n(?Z|xYclq&3y(Yh zcI^sgj-8)ARcCGg^S`N*Q)%}+n@{^gCGPBAb)GSg{XcUvqu`I{N33JEDHfbq#^O|^ z<S#RG!U5mu@1rkQT%D=$?YeRP%KefBC#G?>uuPoWZ_l7~l<m8`lm6|e$;)5fGb%W- j4J0w)Ez|B9f7yAq-`kMT%y@=@fq}u()z4*}Q$iB}N&TrS literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Inverted.png b/assets/textures/Cube_Inverted.png new file mode 100644 index 0000000000000000000000000000000000000000..c88966e2a81981d7e9ad95375909d70e89289569 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)%$(dTz1Gre=Z5GX+<bFfcGMEUa{CXJBApD+%%o z{tp5SoA)o-&%nUIS>O>_%)r2R7=#&*=dVa%U|^W<>Eak-;s5rMr_f;q9+$wTvwzpi zY`rqeU|(bPM2ElI3q_N+@=Er{?C$$Gxim;`+D5NOGbFtaIiH^){I@#oOvj%&#%xOS zkKQi)@#f^`!r%j@@h9h)ANcB|a-T(gk>x?Z8QLpUirD?U?lF3t_E%_W{oUYuK+S4G zPx$d=s~uMF%?gWbs<`?~{7B<d22Y*}y#t&M&)9k%D1Kg*Ek0r1^<T`t7IME`x9{ds Pkk33_{an^LB{Ts5qw0Om literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Inverted_2.png b/assets/textures/Cube_Inverted_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8da98f7caf655f6813524717d75e8f8ca23d257c GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)%$(%CYSg!{W0Hhd(ncJjTGlkht!33<CoLTS<^# z@P80s*t~zqeg*~x&H|6fVg?4j!ywFfJby(B0|Uc+PZ!4!3;(y5JcSM`@VEpvo&CFB zX6uz%2KySTCp!GyUMQNpl~=MqW_RDm$)!Ph(>8iNnjz_Z$oc#X;lI^sXFC4OF=kVm zfAn_Yk2fbj7X}|NjXycZ{J>WymHRB}i!2ZN&Cp(<QpE1(b&t{Gw7)`2>+c5N18P<i zdcuz{TkWuVZ&p}jQ^nO^;zt^vGI;V-=pEp6c*fTAK=JdcZ1D;6uK!~GwUGPmx_vj7 RGB7YOc)I$ztaD0e0sycve*XXf literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Magenta.png b/assets/textures/Cube_Magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c445d966448805ceb5301a6b7701676c0e31e9 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tp1V`7H7WRx$#T4&+b*d?->{vzP78eGcYi)l?3?( z{|5nv&HI<^XJBC9EbxddW?<ku48n}Z^H-!WFfh#bba4!^@PB*BQ|Pb)k4s?F*}v;$ zwqBWKu&=RtqQl?qg`&w@c_sT}cK3apTpFY|ZKKzt8Is<IoX^h?{#%`PrsK~XV>YGv zM{gJYcysb|VekRd_>*(Y4}5h}xzD1$$nv1y4DA&vMeKfF_ZU4+`zy4x{%-I+pk_6p zC;a%b)efuoW`#vIRb2fgex&g!gC|dg-T_XBXKXzW6hE)Z7N0Qh`Y+~R3%TE}+jny* Q0|Nttr>mdKI;Vst02H!)O8@`> literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Orange.png b/assets/textures/Cube_Orange.png new file mode 100644 index 0000000000000000000000000000000000000000..af4c2ecb3a372c602cd3a570464906733dbd230a GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)DWo{>SP3pEUhvmc;*}cm@WBMOV6X85kJYN`m}? z|APR-=KV|dGcYi47I;J!GcfQS24TkI`72Tw7#QYzx;Tbd_`kj6DRfwY$0e}o?BDe= zTd&MA*w<J+(c$m*Leb={ypsJfyZb&)E)CL~w$ba+3`y@p&gW+c|E*3t)A47HF`Lr- zqqhrxygB)~F!+FJ{K+}y2fjL~+-Ff=WO>kUhV}}TB6dHodyF2Z{S{hTe>eCZP_vrQ z6MlTzYKPT(v%(^qDz5$#KhpS=!IP&#?*OO6Gq#=wil0|yi%*z${TK7Eh1_q~?Yp^@ Qfq{X+)78&qol`;+0IU>z+yDRo literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Pink.png b/assets/textures/Cube_Pink.png new file mode 100644 index 0000000000000000000000000000000000000000..5a7ea7ef1b519bb8751293c66699de4ec76c6155 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tv=IJ|NFoFwB-L)^VR>W{xdKz)auWB%D}+DRubeF z{2v4uHt%1upMimav%n*=n1O-sFbFdq&tH+kz`!uy)5S5w!vF0hPocvKJT8GvXaBC3 z*?MJ`!M?`oi4K3a7m6lt<(2G@+1>YXa%qs>w2fYmW=MJ;ay~yp_-}REnT|hmjM<dt zAH7}p<ITy>g~10*<4?{pKk(H_<vxr0BFlq*GqhKz6tVkx-DC7P?XS?%`n$pRfST2W zp77(#Ry(ZTn-vz>RB`o}_>sn^44ym{dIvZip0V{jQ2e|qTYSR2>%W+PE#!W?Zr{zN Q3=9kmp00i_>zopr0Cl>4(f|Me literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Purple.png b/assets/textures/Cube_Purple.png new file mode 100644 index 0000000000000000000000000000000000000000..10e017c1f432c1d9eab0a939a311bba880ee7b30 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tp5{UqQmCpXRZznm{FL$mVtrc_r=BU7#JAXN`m}? z|APR-=KV|dGcYi47I;J!GcfQS24TkI`72Tw7#QYzx;Tbd_`kj6DRfwY$0e}o?BDe= zTd&MA*w<J+(c$m*Leb={ypsJfyZb&)E)CL~w$ba+3`y@p&gW+c|E*3t)A47HF`Lr- zqqhrxygB)~F!+FJ{K+}y2fjL~+-Ff=WO>kUhV}}TB6dHodyF2Z{S{hTe>eCZP_vrQ z6MlTzYKPT(v%(^qDz5$#KhpS=!IP&#?*OO6Gq#=wil0|yi%*z${TK7Eh1_q~?Yp^@ Qfq{X+)78&qol`;+0Bb^gsQ>@~ literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Red.png b/assets/textures/Cube_Red.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5264076cdce558b91dc109cc21cc587bbc3495 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*Tp1V`{)ZO)TYmA3wZs3~r3?%VwTYh-85kJYN`m}? z|APR-=KV|dGcYi47I;J!GcfQS24TkI`72Tw7#QYzx;Tbd_`kj6DRfwY$0e}o?BDe= zTd&MA*w<J+(c$m*Leb={ypsJfyZb&)E)CL~w$ba+3`y@p&gW+c|E*3t)A47HF`Lr- zqqhrxygB)~F!+FJ{K+}y2fjL~+-Ff=WO>kUhV}}TB6dHodyF2Z{S{hTe>eCZP_vrQ z6MlTzYKPT(v%(^qDz5$#KhpS=!IP&#?*OO6Gq#=wil0|yi%*z${TK7Eh1_q~?Yjx` O7=x#)pUXO@geCwh6Mbm_ literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Redy.png b/assets/textures/Cube_Redy.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e2022e42869b30ec3a07e20a981daac7ada6a2 GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>V_;y|p|&!Rfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#LWbJzX3_BHZUr_wJ4f6>0Sk zeH0Sy+v8O-Cow5*(hB9N9Tvq&AKW{b+1ca;dK5VR@pDQEe*CC@q*KAlv*}{Ph0k9O ze_gx#`r6CeS5I1}Q+54b`uy5&QP1y0Z_hh_>u}P(jnNky=ALbTwe{a3rG4Mdq}_fS z7XPz4nd6#B(T7J$|K8m6o%mvX*rT!{vCr4+;(|{!cdJ>q<!tAuWfI!VFZAi;+-A;5 z+sGsHvyT_F+z4}WIPzsi==Gh??DkgIEB>DB`se7!v)j%FY9DjnvR2~!$MZ9iO^dyw zl$jWJTk-z6D(WQGtn}}brJ(b*iR~74yZdIuu(h1Y;yYuS*5Q6Z@o2E(W`X*ze;j<) z%X*|9`98&1(6U!{^5UH~3(oln&zP~tPm#%JUzn4~wr{U1?<TNZ6=6EzcBoH=f1!Wd z#u^s?+|@lZX6ar{K4R|o;<ie}f$Q6&s-LdB7B|gN=yb1me&CN&J2M3<^a|4jZcU$C zyJ)Mikso^mL$uS8ud|ywruSLx7FhhKV?(EI)0UD#r61?^+@59q`A0$w8_&lBOj>3a zzusP3TfBU0w@~3n&$Cxk4<4I*L5pKjbAz18-Q-hqFD<pxO)BeoYE+QV$bI6wn8lS- z`KphO*{_YgP`Fn^ao@`+{Sw@gUhT5lC(do0tYrH&<8DP%b^p&RC*E5&E?v>|{$K9f zYEDai#pit*u}^~K9o6Nf&$zFBw?*-NRMH7;_Au@l57;|@1SXyHJP|2)VS=C9bw0~i z;#(fOi#WfTn<Q}R(O2_xjNAprjqfvBwU_=a*}irD|I56g*S~E!@?%A)d{XzUhz`Mt zG6ufqk0wucnU^6~p0NFac&7u0`OC!n*PPF&cFx?f=elaR(t!hO&s#1LS*s+kb$q8_ z*0J|ZoKG6_ZwMvNx16~@RFXT-`?87LNzEj)L(?36mjx$(R^r&{@7@;CZ!66xqIpX5 ziRM-A&-$~O`Pntry=1)<*&*@UNuGIobAgJs;OR5`!mlJw3r~KmZl0j06zi<JlcA4K z&$Lq1?Sx0bwd;}`y7Ga4PrAAod{aC>Yu5JU!g&$xDPo(B?76*4T1@ZSSJRuNe>7y0 zl4gmxF;<J6Sk~*__(_6WushxSr2p#<<*ulHQ32*^IfZ!vZ;l$(h<*3{y{C9;e@C3p zwF~nvd)Yc)V}4Zj^w}|uq?m|}*S}S&&UwGL>ByDkX=_xEZK+$v@ac3tZ@vo`_t&hl zQ2oU}Pu{t<S@?F4==q}m`%XWf*j4Yle@d}ws-6EHo0kGS0@Hk3Dn9yIxN`pVSpRs> z!3#P^#Fp-iJMy}!F>(2sNQSLHUd_orvb+ABD&IG54zCmKzuHxtin#W6cvlrVHncs~ z{K9lE(otrOn81_?{C!>>tCUrg?p5q!3DIM^_wVt)BL|yVSyZ3=RX$wrrFPk!MWO3Y z^nUps3yU2M3tINH3%KUXO>Q{6cJHs-RYwl~VrmjHO7eZgxb`o<FVDmrxt_IO85kHC NJYD@<);T3K0RYmfDenLP literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Saumon.png b/assets/textures/Cube_Saumon.png new file mode 100644 index 0000000000000000000000000000000000000000..e370b7ab8ddd84fbdf284149415e35ea06cdf66b GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)DWowuPmhDQG$pmh-4)A_D`1=aQ0F3=9lxB|(0{ z|3QFZ^Zq6K85kHi3p^r=85sBugD~Uq{1qt-3=H!<T^vI!{NG;k6gsTH;}Y0(_V0R` ztyg9l>}#x^=<s)Yp=k0}UdjHL-F+V?mj>xg+vxRZhNSl)=kqg!|5m4+>G(6pm`!Q^ z(c6VT-kkhg7<|Aq{^T6<17Dp~?z5;bvOMTFLwkiv5xbw)Jw}hy{t7LvzZ-lHs98<u z2|vDUwZrPYSz(b)6<2?WA8CBb;K@^=cYxF38C%Z-#m}p<#V5?W{)_q7LhiTg_T5~{ O0P>lupUXO@geCxRqI{wN literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Yellow.png b/assets/textures/Cube_Yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..0f055da0c20cc1b2f3da0d12ef895ab2402b308e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>W?*3G{}GwYz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@gaUj*T)DWojvRBleIxPOMVHU-vKbf{{N5hWVPIfjD+%%o z{tp5SoA)o-&%nUIS>O>_%)r2R7=#&*=dVa%U|^W<>Eak-;s5rMr_f;q9+$wTvwzpi zY`rqeU|(bPM2ElI3q_N+@=Er{?C$$Gxim;`+D5NOGbFtaIiH^){I@#oOvj%&#%xOS zkKQi)@#f^`!r%j@@h9h)ANcB|a-T(gk>x?Z8QLpUirD?U?lF3t_E%_W{oUYuK+S4G zPx$d=s~uMF%?gWbs<`?~{7B<d22Y*}y#t&M&)9k%D1Kg*Ek0r1^<T`t7IME`x9{ds Q1_lNOPgg&ebxsLQ0IU0b^#A|> literal 0 HcmV?d00001 diff --git a/assets/textures/Cube_Yellowy.png b/assets/textures/Cube_Yellowy.png new file mode 100644 index 0000000000000000000000000000000000000000..0b29e005f793fc7f11c13b4b1c35904720274cac GIT binary patch literal 1393 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>V_;y|p|&!Rfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#LXDJY5_^BHZUr_wSBz6*;<k zclx5V3%yM#`x-eScM5*wZ*misRb3!>B*Ww)$1b75bhF4Vy-gQc6uFO1m~n6_n~V6a zg2$K6U%0Q3m9}iR?f&4>Tju)4Crk81w!gZzw%YIRukZI3+*$ZWfA!|Dt$$*Vm5XFQ zbY%SZ^mO6OGB^9r_f~yf<nrx}%!B#+rKWERJ$2+-P+OOQXY$G^&+o_goXDN~%Xl6~ zjag~<*@j!@ogFei6Y^ck-tv4{|NMCBqNs-Dv)=M3<zCx-W}k9%;8o?`>W7P?g?FBm zcyM38@AR{_hAX!wu~m4pFwDug!qBUHq>O`?v*OH!u8*INTMN%LXZmy8{PCux3t|fz zoDWDEY<iW|&SE63wIFBW#A!*(B$OvMT-fyMw+kENzt5A>);RcmPh*{@afA0N<5u5W z3(iCxbZRkN$}D4OP^)A#!Jg$(-P6flF3W<}o!@dW>a?aB^QGBF-ww`YWo=YwnXCEA zdP=YK)(TG1Waod<myYcIH{CC|Rp;rgok4PTVW%8L9d6`&=Dp6rdgt`wrd|gI1~y0i z@Z~dFYIdbu<D35JQ880$v&SBmaQpQy*>m1HNB-A+y8ZpXbnk*DgW}(s7ecN~7G-g= z=KP(oqR>5l)#(kJl$0+|t9|+)OSRyqv2G*N#%BiUzWsA2UAABP=SQuwqP66QPae+K zk`+|;KAx*EVXJfL+wb?anR1mEwNI#ABDmvI>p82<ssTaQuKhd`&82et*RCl>k0)O| zP^`6#$xltmeV*uqoHG&*&D|F+*)^W_OM6%SC5&YW;|ZfVc5$!6*M$k)W4^@rJuXm; z&pwv(PI38MRfi=toxe75?GoJee<LeLMdp>d=cZSuc7C1zL_45nM+cv6q$dN9V2i1^ zpDGjQSvjFNrm5`m@82>qu^4z?P-n1At9z7j^~O!%(_DND*D)N@onb0}QhnxuvIi@# zR`Dc?PrN(3eQvkF0_~k;`Z0P>|ENw3sGXlSSA3GW($VscE^{4;+(|why&)NlZK6Ck zR8E)`7*F=^7dYU|pm43p$%ubie88_K>66y#s~=;zv36!5!wn6AVlykrTWVZJ3K8zl z4oWvzGTwP*layyJ)1J0=66<>D141XxaIP#6oEhR$DmOd#QiI^+%*c)#*93(>Z1fNl znR0jbT(5<GjS{Dw+}@mzxVh|AcZH<1=LzB4!aZA__Re7FV^iAjD(|%51`(E~&k0Nq zi+OrEcTe|yw8m6OaMzvQxrV3Af;d;SKXw$z)1LfNR9-oATH`kVzOLgd9qd%*1a391 zPWR4bHs0sUanOeSjKeEVANf|ZZ>e3cl+V_6He8yMpYvnE$Nu@953bkrF24EvMfA_Q zFn5OCkqsdS)<)mm9DMit?h+4yIc3KZ9#3LAX{gXN|5eATU(4!?OZ}7-EUY#}%%1X! zjc0<%U*|1)O24<wJj%Xz$;NZjZXJ=iw{%+$zfIu&jw_+9+LE<zoA&YU=qjC4@ps4f z?XjmX)lCb1&Sm#?6;l_(-+v8(NA8rIk!XzAB>3Q``NC*f&WZBpdjGOME@ynOjQ5`6 z$9K}D%f6hAKYH%w`HRmUI+p#_dgtBoA;@XTf3LP9nSvTh0Z(kFo@JS0d;hP{yqJ{p z|5<A}C+45e$_y!fHJS0{Wc90@j8|(<2Dmh=mrXH$a3Yt}#p%hTnZK4lId7EutfK$G zDd%eDzBe-+R9yD`3vrq9?)v?08`sE0@K|gzX!PiC5o28!bgF*u%wx&_r4%19FfcH9 My85}Sb4q9e0Q4_~Qvd(} literal 0 HcmV?d00001 diff --git a/source/engine/graphics/back/textures/TextureBuffer.cpp b/source/engine/graphics/back/textures/TextureBuffer.cpp index 1d020b3..67013aa 100644 --- a/source/engine/graphics/back/textures/TextureBuffer.cpp +++ b/source/engine/graphics/back/textures/TextureBuffer.cpp @@ -21,12 +21,12 @@ namespace megu { this->_height = src._height; return *this; - } - - GLuint TextureBuffer::get(GLuint x, GLuint y) const { - return this->_data.at((this->_width * y) + x); } + void TextureBuffer::flipVerticaly() { + stbi__vertical_flip(this->_data.data(), this->_width, this->_height, TextureBuffer::BytePerPixel(this->_format)); + } + void TextureBuffer::load(const GLubyte * data, size_t size) { this->_data = std::vector<GLubyte>(data, data + size); } @@ -75,7 +75,28 @@ namespace megu { this->_data.clear(); } - void TextureBuffer::set(GLuint x, GLuint y, GLubyte v) { - this->_data[(y * this->_width) + x] = v; + int TextureBuffer::BytePerPixel(GLenum format) { + switch (format) { + case GL_ZERO: + return 0; + + case GL_RED: + return 1; + + case GL_ONE: + return 1; + + case GL_RG: + return 2; + + case GL_RGB: + return 3; + + case GL_RGBA: + return 4; + + default: + throw std::runtime_error("Unkwon byter per pixel for " + format); + } } } \ No newline at end of file diff --git a/source/engine/graphics/back/textures/TextureBuffer.hpp b/source/engine/graphics/back/textures/TextureBuffer.hpp index cb7f87f..584ed8c 100644 --- a/source/engine/graphics/back/textures/TextureBuffer.hpp +++ b/source/engine/graphics/back/textures/TextureBuffer.hpp @@ -21,13 +21,13 @@ namespace megu { inline const GLubyte * data_ptr() const {return this->_data.data();} inline bool empty() const {return this->_data.empty();} - GLuint get(GLuint, GLuint) const; + void flipVerticaly(); void load(const GLubyte *, size_t); void load(const std::filesystem::path &, bool = true); void free(); - void set(GLuint, GLuint, GLubyte); + static int BytePerPixel(GLenum); private: GLuint _width, _height; diff --git a/source/engine/graphics/front/object/Image.cpp b/source/engine/graphics/front/object/Image.cpp index d719bfb..42ac510 100644 --- a/source/engine/graphics/front/object/Image.cpp +++ b/source/engine/graphics/front/object/Image.cpp @@ -13,7 +13,7 @@ namespace megu { } void Image::load(const TextureBuffer & buffer) { - this->setSize(buffer.width(), buffer.height()); + this->setSize(static_cast<float>(buffer.width()), static_cast<float>(buffer.height())); this->_texture.store(buffer); } } \ No newline at end of file diff --git a/source/engine/io/Window.cpp b/source/engine/io/Window.cpp new file mode 100644 index 0000000..fdc462a --- /dev/null +++ b/source/engine/io/Window.cpp @@ -0,0 +1,74 @@ +#include "Window.hpp" + +#include <stdexcept> + +namespace megu { + Window::Window() + : _pointer(nullptr) { + if(glfwInit() == GLFW_FALSE) { + throw std::runtime_error("Cannot initialize GLFW."); + } + } + + uint16_t Window::width() const { + if(this->_pointer != nullptr) { + int width; + glfwGetWindowSize(this->_pointer, &width, NULL); + return width; + } + return 0; + } + + uint16_t Window::height() const { + if(this->_pointer != nullptr) { + int height; + glfwGetWindowSize(this->_pointer, NULL, &height); + return height; + } + return 0; + } + + bool Window::isOpen() const { + return this->_pointer != nullptr ? !glfwWindowShouldClose(this->_pointer) : false; + } + + void Window::resize(uint16_t width, uint16_t height) { + if(this->_pointer != nullptr) { + glfwSetWindowSize(this->_pointer, width, height); + } + } + + void Window::open(const std::string & title, uint16_t width, uint16_t height) { + if(this->_pointer == nullptr) { + this->_pointer = glfwCreateWindow(width, height, title.c_str(), NULL, NULL); + if(this->_pointer== NULL) { + throw std::runtime_error("Cannot open Window."); + } + + glfwMakeContextCurrent(this->_pointer); + glfwSwapInterval(0); + + if(glewInit()) { + throw std::runtime_error("Cannot initialize GLEW."); + } + + glViewport(0, 0, width, height); + } + } + + void Window::close() { + if(this->_pointer != nullptr) { + glfwSetWindowShouldClose(this->_pointer, true); + } + } + + void Window::pollEvents() { + glfwPollEvents(); + } + + void Window::swapBuffers() { + if(this->_pointer != nullptr) { + glfwSwapBuffers(this->_pointer); + } + } +} \ No newline at end of file diff --git a/source/engine/io/Window.hpp b/source/engine/io/Window.hpp new file mode 100644 index 0000000..b541bf8 --- /dev/null +++ b/source/engine/io/Window.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include <string> +#include <GL/glew.h> +#include <GLFW/glfw3.h> + +namespace megu { + class Window { + public: + Window(); + Window(const Window &) = delete; + ~Window() = default; + + uint16_t width() const; + uint16_t height() const; + + bool isOpen() const; + + void resize(uint16_t, uint16_t); + void open(const std::string &, uint16_t, uint16_t); + void close(); + + void pollEvents(); + void swapBuffers(); + + inline static double Time() {return glfwGetTime();} + + private: + GLFWwindow * _pointer; + }; +} \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp index ba376e7..7b6a23d 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -6,6 +6,7 @@ #define WINDOW_WIDTH 1200 #define WINDOW_HEIGHT 720 +#include <engine/io/Window.hpp> #include <engine/graphics/back/cameras/View.hpp> #include <engine/graphics/front/object/Image.hpp> #include <engine/graphics/front/group/ImageGroup.hpp> @@ -13,7 +14,7 @@ int main(int argc, const char * argv[]) { try { - //? GLFW + /*//? GLFW if(glfwInit() == GLFW_FALSE) { std::cerr << "GLFW : GLFW Init Error" << std::endl; return EXIT_FAILURE; @@ -43,47 +44,45 @@ int main(int argc, const char * argv[]) { std::cout << "GLFW Inited" << std::endl; //? Glew - if (glewInit()) { + if(glewInit()) { std::cerr << "Failed to initialize GLAD" << std::endl; return EXIT_FAILURE; - } - - std::cout << "Glew Inited" << std::endl; - - //? Viewport - glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); - + }*/ + //? Window + megu::Window window; + window.open("Window", WINDOW_WIDTH, WINDOW_HEIGHT); megu::error::opengl_error::check(); + std::cout << "Window Inited" << std::endl; + //? Camera megu::View view(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + std::cout << "View Initied" << std::endl; //? Image megu::Image image; - image.load("assets/textures/Test.png"); + image.load("assets/textures/Cube_Red.png"); - image.setSize(WINDOW_WIDTH/2, WINDOW_HEIGHT/2); - - std::cout << "Texture" << std::endl; + std::cout << "Image Inited" << std::endl; //? Group megu::ImageGroup group; group.temp_set(image); + std::cout << "Group Inited" << std::endl; + //? Render Loop glClearColor(0.0f, 0.0f, 0.0f, 0.f); std::cout << "Render Loop Begin !" << std::endl; - while(!glfwWindowShouldClose(window)) { + while(window.isOpen()) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glfwPollEvents(); - + window.pollEvents(); group.draw(view); - image.setPosition(sin(glfwGetTime()) * WINDOW_WIDTH/2, cos(glfwGetTime()) * WINDOW_HEIGHT/2); + image.setPosition(static_cast<float>(sin(glfwGetTime()) * WINDOW_WIDTH/2), static_cast<float>(cos(glfwGetTime()) * WINDOW_HEIGHT/2)); - - glfwSwapBuffers(window); + window.swapBuffers(); } std::cout << "Render Loop End !" << std::endl; } -- GitLab