From 33a520c0ff8932c02ad76ffa54d2460df6f39137 Mon Sep 17 00:00:00 2001 From: dark-dylan-dev Date: Mon, 23 Jun 2025 23:53:32 +0200 Subject: [PATCH 1/3] [ADD] * Some GUI work * CMake adjustments * Window size more appropriate --- CMake/SetModuleUUID.cmake | 14 + CMakeLists.txt | 16 +- KaguEngine/CMakeLists.txt | 23 +- .../assets/fonts/fontawesome/LICENSE.txt | 165 ++++++++++++ .../assets/fonts/fontawesome/fontawesome.ttf | Bin 0 -> 165548 bytes KaguEngine/assets/fonts/opensans/LICENSE.txt | 93 +++++++ .../fonts/opensans/OpenSans-Regular.ttf | Bin 0 -> 130832 bytes KaguEngine/assets/fonts/roboto/LICENSE.txt | 93 +++++++ .../assets/fonts/roboto/Roboto-Regular.ttf | Bin 0 -> 146004 bytes KaguEngine/extern/CMakeLists.txt | 8 + KaguEngine/src/App.cpp | 23 +- KaguEngine/src/App.ixx | 4 +- KaguEngine/src/Entity.ixx | 2 + KaguEngine/src/ImGuiContext.cpp | 249 ++++++++++++++++-- KaguEngine/src/ImGuiContext.ixx | 33 ++- KaguEngine/src/Window.cpp | 20 +- KaguEngine/src/Window.ixx | 1 + 17 files changed, 695 insertions(+), 49 deletions(-) create mode 100644 CMake/SetModuleUUID.cmake create mode 100644 KaguEngine/assets/fonts/fontawesome/LICENSE.txt create mode 100644 KaguEngine/assets/fonts/fontawesome/fontawesome.ttf create mode 100644 KaguEngine/assets/fonts/opensans/LICENSE.txt create mode 100644 KaguEngine/assets/fonts/opensans/OpenSans-Regular.ttf create mode 100644 KaguEngine/assets/fonts/roboto/LICENSE.txt create mode 100644 KaguEngine/assets/fonts/roboto/Roboto-Regular.ttf create mode 100644 KaguEngine/extern/CMakeLists.txt diff --git a/CMake/SetModuleUUID.cmake b/CMake/SetModuleUUID.cmake new file mode 100644 index 0000000..f7de12b --- /dev/null +++ b/CMake/SetModuleUUID.cmake @@ -0,0 +1,14 @@ +function(setModuleID) + set(CMAKE_CXX_SCAN_FOR_MODULES ON CACHE BOOL "" FORCE) + set(CMAKE_EXPERIMENTAL_CXX_MODULE_STD ON CACHE BOOL "" FORCE) + if(${CMAKE_VERSION} VERSION_LESS_EQUAL 3.31.7) + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "0e5b6991-d74f-4b3d-a41c-cf096e0b2508" CACHE STRING "" FORCE) + elseif(${CMAKE_VERSION} VERSION_GREATER_EQUAL 4.0.0 AND ${CMAKE_VERSION} VERSION_LESS_EQUAL 4.0.2) + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457" CACHE STRING "" FORCE) + elseif(${CMAKE_VERSION} VERSION_EQUAL 3.31.8 OR ${CMAKE_VERSION} VERSION_EQUAL 4.0.3) + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "d0edc3af-4c50-42ea-a356-e2862fe7a444" CACHE STRING "" FORCE) + else() + message(FATAL_ERROR "CMake CXX_MODULES not supported") + endif() + set(CMAKE_CXX_MODULE_STD ON CACHE BOOL "" FORCE) +endfunction() \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 995ae79..d130bdc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,16 @@ cmake_minimum_required(VERSION 3.30 FATAL_ERROR) set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED YES) -set(CMAKE_EXPERIMENTAL_CXX_MODULE_STD ON) -if(${CMAKE_VERSION} VERSION_LESS_EQUAL 3.32) - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "0e5b6991-d74f-4b3d-a41c-cf096e0b2508") -else() - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457") +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# C++20 modules +include(CMake/SetModuleUUID.cmake) +setModuleID() + +# Default build set to release +if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "." FORCE) endif() -set(CMAKE_CXX_MODULE_STD ON) project(KaguEngine VERSION 0.0.1 LANGUAGES CXX) diff --git a/KaguEngine/CMakeLists.txt b/KaguEngine/CMakeLists.txt index 35bbc88..3fb2433 100644 --- a/KaguEngine/CMakeLists.txt +++ b/KaguEngine/CMakeLists.txt @@ -4,6 +4,10 @@ file(GLOB_RECURSE CPP_MODULES src/*.ixx) # Adding the executable add_executable(KaguEngine) +# Enforces C++23 on the target +target_compile_features(KaguEngine PRIVATE cxx_std_23) + +# Add source files & modules target_sources(KaguEngine PRIVATE ${CPP_SOURCES}) target_sources(KaguEngine PRIVATE FILE_SET all_modules TYPE CXX_MODULES @@ -13,14 +17,8 @@ set_target_properties(KaguEngine PROPERTIES CXX_SCAN_FOR_MODULES ON ) -# Adding external libraries -add_subdirectory(extern/glfw) -target_include_directories(KaguEngine PRIVATE extern/glfw/include) -target_link_libraries(KaguEngine PRIVATE glfw) -target_include_directories(KaguEngine PRIVATE extern/glm) -target_include_directories(KaguEngine PRIVATE extern/stb) -target_include_directories(KaguEngine PRIVATE extern/tinyobjloader) -target_include_directories(KaguEngine PRIVATE extern/ImGuiFork) +# Third-party +add_subdirectory(extern) # Adding Vulkan find_package(Vulkan REQUIRED) @@ -31,15 +29,6 @@ endif() target_include_directories(KaguEngine PRIVATE ${Vulkan_INCLUDE_DIRS}) target_link_libraries(KaguEngine PRIVATE Vulkan::Vulkan) -# Enforces C++23 on the target -target_compile_features(KaguEngine PRIVATE cxx_std_23) - -# Set default build type to Release if not specified -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) - message(STATUS "No build type specified, defaulting to Release") -endif() - # Linker options (to disable console window in Release build) if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") if(MSVC) diff --git a/KaguEngine/assets/fonts/fontawesome/LICENSE.txt b/KaguEngine/assets/fonts/fontawesome/LICENSE.txt new file mode 100644 index 0000000..e69c5e3 --- /dev/null +++ b/KaguEngine/assets/fonts/fontawesome/LICENSE.txt @@ -0,0 +1,165 @@ +Fonticons, Inc. (https://fontawesome.com) + +-------------------------------------------------------------------------------- + +Font Awesome Free License + +Font Awesome Free is free, open source, and GPL friendly. You can use it for +commercial projects, open source projects, or really almost whatever you want. +Full Font Awesome Free license: https://fontawesome.com/license/free. + +-------------------------------------------------------------------------------- + +# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) + +The Font Awesome Free download is licensed under a Creative Commons +Attribution 4.0 International License and applies to all icons packaged +as SVG and JS file types. + +-------------------------------------------------------------------------------- + +# Fonts: SIL OFL 1.1 License + +In the Font Awesome Free download, the SIL OFL license applies to all icons +packaged as web and desktop font files. + +Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com) +with Reserved Font Name: "Font Awesome". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE +Version 1.1 - 26 February 2007 + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting — in part or in whole — any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +-------------------------------------------------------------------------------- + +# Code: MIT License (https://opensource.org/licenses/MIT) + +In the Font Awesome Free download, the MIT license applies to all non-font and +non-icon files. + +Copyright 2024 Fonticons, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +# Attribution + +Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font +Awesome Free files already contain embedded comments with sufficient +attribution, so you shouldn't need to do anything additional when using these +files normally. + +We've kept attribution comments terse, so we ask that you do not actively work +to remove them from files, especially code. They're a great way for folks to +learn about Font Awesome. + +-------------------------------------------------------------------------------- + +# Brand Icons + +All brand icons are trademarks of their respective owners. The use of these +trademarks does not indicate endorsement of the trademark holder by Font +Awesome, nor vice versa. **Please do not use brand logos for any purpose except +to represent the company, product, or service to which they refer.** diff --git a/KaguEngine/assets/fonts/fontawesome/fontawesome.ttf b/KaguEngine/assets/fonts/fontawesome/fontawesome.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0m~3~bsOcnhk^l)Hq!$QDOrc2!0V5zHB27S~ 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 literal 0 HcmV?d00001 diff --git a/KaguEngine/assets/fonts/roboto/LICENSE.txt b/KaguEngine/assets/fonts/roboto/LICENSE.txt new file mode 100644 index 0000000..9c48e05 --- /dev/null +++ b/KaguEngine/assets/fonts/roboto/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/KaguEngine/assets/fonts/roboto/Roboto-Regular.ttf b/KaguEngine/assets/fonts/roboto/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7e3bb2f8ce7ae5b69e9f32c1481a06f16ebcfe71 GIT binary patch literal 146004 zcmb@v2VfL8(?2{ad+uON$H1LAY>MfWC3h031oSW{sOP-O*@UYa+3X zh(|PQ->#F#SC?)Obx$XXINhvM=Z4Rg-K;X~U-`jO6UuosEl$l6d1-Zm@3U3hJ z!)#QOh+V*akGR3H!_EZ9eof?goX9dgZp+e`D`8HtMx;G_fhYUa6b@s6(D@gNDY%Zd=Yu5EUFoLlX&~^;&DO`-s;9~S1orU{8E=C{YV)Q8~+5dvRg!?rv zMwh@ZM%QpLx`~U?ZTbc7U3v!h1ujM=NU1^Mad?6@pus6^3hL#o!i)ObJ$+ zg#xe4s=%$rs==+z>cDNl8pCbIn!|0y+Q99=I=~G_|75H?12m%v@l!2v-6Toq>oxGLTgpThlI zdxi1Bb$B(?I;_U0)}b{_>yYX_tb?n6Y8_PFv<|FZ z);gei0c-y%rnO%s)7rPvr`A4|O>6IprZv8TX^pFpWbIXGogS~~^zuyzbKtsR1s ztnEWgYrBxi*0#k>Ya4s0wY5FT+RAQPTiUx=Tj0KVG1J=2W?GxtMp&B!nbyWZBdm?A zrnO0;Y(^|iPFo<0~F@GXQ5e_O2E{=iUNW^xX!0uL*0QoQT9~MXLRtZX`CrT zLkmEvokNWpY1KH#v@b0f>s8kv50wCYz>nU6Zcm2JJ4NT|bGilIy<|CAE*8v6unMdO z3uB#FPu7>c!zQtXYzf=U9P9ym#!Mc_tMf>HoWIXMdnR9+<_p*&G{`Lq1p z;6|>ZRJ2~v$wfC6eN^-bI6yXUo4+l$Ex*lX3kC-&*=o8tFv_;ow!@YL4ji!^e}x0x zTpY-ijRW!E00RdYIPe@CfFPK^n>W~F^Idk^JOkOd1h@$J67V_TQ^3c7bAb2Fe5QwK zy!`X!UG9bZmM~L$ziiCvz4-3Mw=X_?ap1+S7du~Ud9nUQ0$5v+v=qMZMj3xSfBF0w z(etB#RKQNa=I5K>t_Cay%tfk3fH2@ah;F{PdE(}fo2zf~n=5awx;En4$ZJDk(+#>d z@LK!i>@kxGZeemX1;h=Y_S4#B29Dh`V@Xr!a! zm^dy@h?8_yoQC~z4wlGy^!yL#L;46d-6!H*Wz`8&d_Z4`59w?4-;c#7uu(41Mfyg3 zE=hbr-@>B*4w~(2`d(as&G!TSC@zZ6=(6}md@H^a-@}smLHr0?@QS!Bexf_D|1#)T zafR+d$375O=^;I$$Mi&8qu<2O;yV2 z%tP6Wa-9@Xviz(7E655-Lt3P#^pI;=8CI5+W93-|Wg|g%RZ^BCY$tD471m>QRs&jh zlk}0ka*13j{bUZgS#FVQSZmfsu9B-^U-`>ia+zGty0ES+LKc>RvWP4ytxa^VJrSn9ZN3&JrE(s_DNm~qvGdy=nl!G(KKh_Tm& z`(UoL#)bQ4!~Iw>InEWHgR04fF1%nCZBP)tvYIm-_PVz$%x7I&ruhihYE`gE<7)l z6k}X?J}N3ATzGyeCfqa^Ae+eN3NJ{-`6CxzhzfIeS%DP7UHr$~qbMwNCp{q)0KMeI zOOP-0loKyW-h6-yFGcxyxC<{$#V`+WrU|72ypRholht0VEEU2$!P<%oYx-5ON%rGBXA zztt^^8~^y!>a*{ZlQnsQ9N8*=sczTpmJgAs-{q zHnHIP-zDzvA+~H%_@>w_8r*e$Q>yq3hPfJsTNi} z)ogSaVuw&4txHC^o^@-Ka=PvNk~9C2WTU38bT;Y)tPk=UtNUVa#Pvt6w%2lqN62X8 zue8(%;EEoVwiC6W*6`c8%Fmv&s#lz*Y9!n;NYzC@Jrdzcrs-?0&VZ%D?2s||aG{u1f$xP zYq{44Ubnmpde`xu?S0HAk58men$I`B(l^w1u@A&)sxA1?@Va-9yy6VNR)=e(A@F?o~n`R41CZ*V>{f0_K-@;@zLDPS*fyuhagsbFxy=z>QJepV<) zp|XXV6&hA(R-to+zAW@}p~rzTFg$Q`;Hkm|3U?^Hw@B+Edy3pBTBGRvqQ6)RS<6{t ztaGfptT${GZR>)9gIWcx4oWZ9qS&TlSL~(i?d+@VY4&gIKNY9qfyG-DA5%QF_!q^W z2m1#X4=x)V5j;A0VeppV%fUB;pNE8oObba2`7-2QiDD&2mq;y{tK`IzmrMDS8eQs# z(q&5bDSf8&?a*4GiJ{laR4g;G%x7g@maSHHR@wKo|RTsx==Z|a@)$&EAOs+sY?DTU8>Bj@T5Q>XWOdR=-oDV2uVf`qr3MGk?wcHAmK5RrAAI9<`d*npo?@+9hiDt^IBt|2hNf z9H{f8Zo#@k>YlA9>P6Q(RPSN^()Hh}|8ZEkumufdg9#1(XgH$bca2InifOc}(Tm2> zO{mG%ranzaH9g$)&t@f?HElM$+016^npbH)qxt6MCz}7&qE3s=E#7N!v!$(Nx0XX% zPH8#6<))TDwF+$2rPZQVTU#A!b-Q(e)?Hg~Y~$HxXq%~RmbZDo&C|AiZEbDi+wN%l zW4k)-*0j6czI6M#?c2AX)&6w*uiM{h|5pd!4&6HJ=z zxL^4A@Ee`OI&bWJw@a-qGrN4zHCNY;U5|D>-}S4mPyhLf;1S*tfe~dQnnuJ#OpI6_ zu`l9S#QPDCBLgDqL`Fo$M~;eI5Y;fMPt?q)^-(*b_C=*dor(G=>g%Ws1?H1Cl zeYc6-9Nms|d$-%i-7a*y-0fDk``!MGX3^f!xuXk52S>M#9vOWu`g!;8?lIldy1(qv zzQ>v#cY2oU*}Lban4&TLVm^%Ju`Od`Vu#1hie2A}_bS}0U9Xs4bK?reb&5-kyAq!( zzES+x`04SR;*Z9kkAKm-X7A;_|LoJL&(l6n`#$Jbt>3_Y3;TW2zi9u3{df2OYe3xr zy$8HMkPR$2u;;+J1CI~9J*d>6HiO0wT0ZFE;EIE14o(~Va!Ao3ZHM$9vUGJMg4 z`fGIe(X&S%9sOubnK9kREF5!U%+s-z#?~7#QGCwPyFhw3UAGR>-)FsyglyiPu_m=PQ`cLdT04N&n7jU)OFILNv9_F zn4C5x$CL(BMo!r}<(sLwrgoZ|I`!wNFQ%287C&vyG{>}i(<@Jpo<3{(h3S{4-43-fEw zpFMxk{O1co7K~i5W5Kh9r5A#|3x_W}x=1W)w5Z>rZHo>s`e@PRMGqFs#RV3ZTijrA z_~O2cCoEpDc=O@|i{D@T!{U2O*pfU;N-U|hr0tT}C8L(iTC#S@-X&+2Tv&2z$)8Jo zm)e$ATiRl2^wObArz~B*bm!6|OFvn9b?KvJ#yZq&fTq}yNsJ5cTis%(XS4>&4Y{kwMM^}8Z;>wCgD~*)}Rt{eI z!^(TBXjSf2!K-SlYPqWWs$r|9uUfe(an*@cU#z;m>i5-Ns|&9#zq-NdPOJN@9#psvHh%5cwR6{QT${S~?AmYF-dX!%UCwpI)>U2CVqN!j!`4k*w_;u5x)bZZSa*Hh zAM3r>7hYd}eS`Jk>-(;sxPIaKt?LhO@Yv96!{`mOH>};TXTzBd7dG79@N}c!M%%_p z8=Gv5*f?FH*_&9==|HaFWGwRzCy$(xsM-o80)i`SOITgq)|uqAv;pDp9IBy3r~<^EQ- zHTTw#tu?o{*&4HTs-rII@+qG?vw|i_axIK7#_3bUTM{ggtefsvVx8K_S=MJA8MR!!((P&4P9RqfZ z*^#hg!;X|4=XPA$@$-&5J09(Lx|8qp-Wjm7(9U8zOYf|-v)0arJ6rDTv2(=E89P_) zOxk&3=a)Ob-+684FFPOZ{A-urF59lkyPEEb+%box1zn?oW4LOe~OSODvgKC$U{(*TkNQ zBNHbkE=b&zxIgiH;`fOeNtBc)sYFt(q=rc?le#4JPa2*yJ!xf9a?+Wk3rV+=o+kSx z=S?n>Trs&xa);#Z$-|PTC9g={ot%<7D8h2-1G_xJEUdH0msQ+H33J#F^H>>0Ud z)}DoXw(dE+=i@zB_B`5a?9IP7bZ`B=o%Z(KJ9O{Zy>s_&+`E78`Muxoy}Q@k7qBm6 zU#)#@_r>lTy>HIG#rwAJJF@SSeOLB9c32#R9AzC19N~_Bj){&{jsuPl96vf9q{x&4 zDP>Z^Qo>V)rz}X>l5!~J!;~LW?x(WUys0Hq>!h|zjY}Pqnvl9a^=RrhslTK?-|xS_ z`2HIETkr3=f5iTo`&aMZv;Xw|3;S>He|8|pfzSiZ4n!Rod|>i{r3ZE#IC9{V13w*j zbkK6J(7|#C8ypNj*!SRsgYyq=I=KJf`GemdynE0*l>1PLL$wdJJrsLr)S;P&wjMfk z=)*%l9=d;+AI^KY9HKg ziXE$VtmUyD$3`5Rd2G$GJ;zQTyKpT1*z@E5$BQ4YalG~MnB$|4&pN*5_}=619{=X} zo#QW01e^#tQS(Hr6FpCiJTdFU+7tUuym#W;6W34NKk@9O$I09$ttUfIRz6w#WTTU< zPIfxk?PT1^fhR|voOp8D$+;(&o?Lr!-^q7RUObt8^1;bJPx+q8bE?Ftnx`6^YH_N= zsmN1KHcW@>eHJ~?>T+?^jD`ZoxXMYuQR@93Y-Z& zQ}0a2Gd<1>KQsNz$}@>)4xM@T%r{{zSFc*RV%E$V)2B_HGI`QFZ@)Eh!uWAx$BZ5| za>VdqLx&6=G;l!wetrA&j*sgV8`HB#_vmg>kr7?HbPn&-p?$lyZCbZ#*`j%~rX{WZ z-d<%`ijQ|Ad!ydoWy?^Cw+~RCvSpaV(#YYV10C%`ZFq$k5!9+=? zLk2fd5F4Km=Z=U(7I+HJB8yg??5#RPMcA4o#OS9G68_4aGroq(QOCJ32X7P};bH~&(0SYZwdfY^XuHip?GqB>Q%D3Oo3OwXrV*pj+(^_U((dRLY7eqU^hQ=G zSY8bZk7)$V*Nrh-Gn8OU^QT^bxUTjz=E9;P9JZJ~kkXSZrWIkUhv28JT9DDXdc4gOC@ehADP7yF*GCo82iY z0);wkv%@1&Ipd9D@M5+&;v&*)&O}GT@SZ3xjXT5qb-I)gRS;r0Vx%)BOvfNhBFxhnHrbiFq${;2V*FLi5p1|1 zunsgk|G*_QWSF-R<{9P{=8GK|XbTmTijboW+m{&a_ho)8Fa>#{1_(}LlT*CH0zoZu zat0m6>n1Oz!X{^ifpV2BTSh3-S@F(UHRv1_vEP@Fzjl$Lq53OZrb!BK8*0xI>kbiU zz$PiIZD6MoE_~!rnX39+{FSPr|S!$i|)$ zYYB-7O^9$PAycAd_pb#(6~Qgy>`h}-3Un0ww?I%_7h8;@S4=2Sn}5>;MBCzGRcgwY z!bNZjlfkSW)dQz2z7B7D?}iQ^d&A6_`c&T;V^J|4_J$6Y&&lT|_9nIh{S)Hsy&!X8 z?IZdI_KA!|-i|PPtV7xx2Bt`Ai2hW7p%P6}sBI`}(+X18F0_3&bW2rzTS7u(TS}M= ziH(a@_l<+l(-T}#_Qs7>H+4VJ#FpR)i;asxiYAddaoI8;A)$#q))o(Sf$D-+o$PA! zL6j;bJSrl=H{Kp^2T#Mo5@J#9KwDg7U_xY^<}t_tX;ik1k)@AZ>WHge9~{>Q4mv`w z7<(^gfa;I0hxL6upbt`I53{#a#evwCifZ@?E$vO>kwQUiyhA|lf^6~F5ut>H+G|bm zkBN{)W+EHfRA-*xUt39vx;&p_g*v5+IF^?&xhs zaIS=a1Y6An=&9~du`(pCOAH1A>_BL0(@h-)nin-tv&d{GH98aupG9wiu^}~wW=$hIc6Y7cl z{{B>g=YLliL_xQv!%GvQv{8tsBJ7`w!X^mSKrK}P@VK)YEmc(vFdBV2At5dnHdXf= zs)zc9Qoa|tLds6c=HzO-CmUr8c<<<8y=ym?*k#w!sCMofAH~)Q?z{$>5qz^ zfkJc9oo1Sffv(g})`7psPs_P0T6YYUnR;$)Xe6+v3Sy9|sRCC|@^ST2-`BLhD|=^~ zdc7KH&&*5>^!Cgg)m;knh50K34U`yS^9Q?X>81-oO>m!3D}{N4xDr4j{ZY+Y2?;)S z=a6Do>i-B)7-@5oBB7mM4RE}TrcX%l^m}uR=j-YH^aHB%qm}(KeU*!=J9sy8_%u@X z3mVYjrSwoawC~&Jl(<1Ev^kM&IMhL?maDTm2gw48_h2+00mp}GWu_9k`PN5wX=iq? zhlWSIjY1Ts&Vd>JSfxJ)=?PL0s92|E&VimWG&Is_a=oo&W2){_Q$uaG{;;zeF<4s| zD1qCc4UpP1L@T)j7(D%BF*HLDDZLX}0Jc;|We>yVxBJ_$`?-#DB4l?;TqleHGB~16 zV9iL(B+|@Z3M+jD)^H5+fbayH%|92S5^MpOS~zB?t|(n`b{&RM+!EqSrD`xEG$Fy6 zPFdl;JfT%5FhR}HylVt{gQms9TzuR9H=w zvdW#3S?*Yrt0+it7o0|Y-&m{?Io3_N`d?QyjW8P9orK5`SJ?^C2~n6J2BlF^RlJKH zb)TcKQsbJSrHUXTF%NIoTz^dMu>){_+KfGKbL6iyR!*WJ#*frrKBYda5B1|GXeR%V zN{A6uSSCwSYS^n%82iWCP;R6j2}lC;0Q3Y@1*`$g0JH@R2gI`nG=rs3DVd9! z%XnHP%hN3E>uTjuo(3B=sEB+{yN#+e&IqI3avoq1?nlxD;~?$kW$CaSKvfL`;q7R* zMWsc!F@?q&zS4Mmgoj)RkLlsc1o^;Co}A zPMBCnl8>jFGKvPvcW9ohK;7ju)S(`A=O0jAgvH8!G@m`91?-M_Qs&V3IuA*6s%7U;HI#m2grLlJ{AN)vukiys#a=_1H45w+p=SsY@ zl{={$>eF9Vp`0v(mdSMLCL*b~r3FQcWuW;C^_D|ulBFfWlV~CK?N5`;>kEpT71oNS6LXnDp@+j?; z@6tTWyVOpm&^vMoHA7y}avd#~A5c$YE%paJqjho=tp)GxyfoR3xwHjomUwKY{vM4f z7UgX=W>F7*)Vyv?qCRpdMH`F2&&Sw{D9r=12E~c9lqeR^0!6plG(m0wG%_z)no}zaQK-?ICVDQRN}k)Xr*0b6GY*i$ z@S&|1NtHbsQ6S{8y`sxVqzZ;7wXu|?aN`o~GbYeVk6BoDI!z8s0OhjWMH+*)BEMxG zCFn3@H%bnsUf|;f5e>dypmLTV$|wCP0$*ILmz@BcsEl!+Hb{I~q{77aRMPki^*f3C zDC%b!PwOokQJ+7ksHGaxMF84Tyk$20c<`g2c^mhAE$G{p8+c}p`9kI6;YI5#WoU}* zYX0C+hSH3`(3iial90EY9=`OE#g|T4zM`eZ&$QCZpu-+tLNQ)926; z2WW|BMezFxEdk$#gQr8l=UTEfmG&r0RgCUrHICCtxq|u`!{863>G0=RDo}lS(!8wm zj-s{3OR6C6gZKMUCgcU}w_9eQ45gRq(FWBIy^}+th;zkhUx;L$~aFqR+ z%7`EuCiCEnMZBwb`y93p#~yFB;~Dyvcm?2F07}d$|qI{aNK4xQT+I<70^Lwda32fjy*fKzk8O6A-7KnFw&|u>awC34LklLRQOS+UYq4 zZF?7ZDC7g<5Bir?+9?$JD#&O~-Hmo=*L3K?�egE!tu*v~K}gWeK5h%eT<6pQ9}X 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�PJ}HG?Q&#wR5zLv9qnRi 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 }; - ImGuiContext imGuiContext(m_Window, *m_Renderer.getSwapChain(), m_Device, m_DescriptorPool); Camera camera{}; + std::vector views; + views.reserve(2); + auto viewerObject = Entity::createEntity(); + auto otherView = Entity::createEntity(); viewerObject.transform.translation = {0.f, -0.5f, -3.f}; + otherView.transform.translation = {0.f, -1.f, -5.f}; + views.emplace_back(std::move(viewerObject)); + views.emplace_back(std::move(otherView)); + + ImGuiContext imGuiContext( + m_Window, *m_Renderer.getSwapChain(), m_Device, + m_DescriptorPool, + m_SceneEntities, views, camera + ); auto currentTime = std::chrono::high_resolution_clock::now(); while (!m_Window.shouldClose()) { @@ -75,11 +87,11 @@ void App::run() { float frameTime = std::chrono::duration(newTime - currentTime).count(); currentTime = newTime; - cameraController.moveInPlaneXZ(m_Window.getGLFWwindow(), frameTime, viewerObject); - camera.setViewYXZ(viewerObject.transform.translation, viewerObject.transform.rotation); + cameraController.moveInPlaneXZ(m_Window.getGLFWwindow(), frameTime, views[imGuiContext.getCamIdx()]); + camera.setViewYXZ(views[imGuiContext.getCamIdx()].transform.translation, views[imGuiContext.getCamIdx()].transform.rotation); float aspect = m_Renderer.getAspectRatio(); - camera.setPerspectiveProjection(glm::radians(50.f), aspect, 0.1f, 100.f); + camera.setPerspectiveProjection(glm::radians(imGuiContext.getFovY()), aspect, 0.1f, imGuiContext.getDepth()); if (auto commandBuffer = m_Renderer.beginFrame()) { int frameIndex = m_Renderer.getFrameIndex(); @@ -130,6 +142,7 @@ void App::loadGameObjects() { loadedModel = Model::createModelFromFile(m_Device, "assets/models/obamium_model.obj"); auto centralObamium = Entity::createEntity(); + centralObamium.name = "Obamium"; centralObamium.model = loadedModel; centralObamium.texture = std::move(obamiumTexture); centralObamium.material = centralObamium.texture->getMaterial(); @@ -146,6 +159,7 @@ void App::loadGameObjects() { loadedModel = Model::createModelFromFile(m_Device, "assets/models/viking_room.obj"); auto vikingRoom = Entity::createEntity(); + vikingRoom.name = "Viking Room"; vikingRoom.model = loadedModel; vikingRoom.texture = std::move(vikingRoomTexture); vikingRoom.material = vikingRoom.texture->getMaterial(); @@ -163,6 +177,7 @@ void App::loadGameObjects() { ); loadedModel = Model::createModelFromFile(m_Device, "assets/models/base.obj"); auto floor = Entity::createEntity(); + floor.name = "Base"; floor.model = loadedModel; floor.texture = std::move(dummyTexture); floor.material = floor.texture->getMaterial(); diff --git a/KaguEngine/src/App.ixx b/KaguEngine/src/App.ixx index 192055f..390de78 100644 --- a/KaguEngine/src/App.ixx +++ b/KaguEngine/src/App.ixx @@ -18,8 +18,8 @@ export namespace KaguEngine { class App { public: - static constexpr int WIDTH = 800; - static constexpr int HEIGHT = 600; + static constexpr int WIDTH = 1600; + static constexpr int HEIGHT = 900; App() { m_GlobalSetLayout = DescriptorSetLayout::Builder(m_Device) diff --git a/KaguEngine/src/Entity.ixx b/KaguEngine/src/Entity.ixx index 1fa7fa7..204823b 100644 --- a/KaguEngine/src/Entity.ixx +++ b/KaguEngine/src/Entity.ixx @@ -45,6 +45,7 @@ public: Entity(const Entity &) = delete; Entity &operator=(const Entity &) = delete; Entity(Entity &&other) noexcept { + name = other.name; m_Id = other.m_Id; color = other.color; transform = other.transform; @@ -57,6 +58,7 @@ public: [[nodiscard]] id_t getId() const { return m_Id; } + std::string name; glm::vec3 color{}; TransformComponent transform{}; diff --git a/KaguEngine/src/ImGuiContext.cpp b/KaguEngine/src/ImGuiContext.cpp index e58860b..3337ecb 100644 --- a/KaguEngine/src/ImGuiContext.cpp +++ b/KaguEngine/src/ImGuiContext.cpp @@ -1,18 +1,30 @@ module; +// libs #include "include/imgui_includes.hpp" +#include module KaguEngine.ImGuiContext; +import KaguEngine.Camera; import KaguEngine.Device; +import KaguEngine.Entity; import KaguEngine.SwapChain; import KaguEngine.Renderer; import KaguEngine.Window; +static void check_result(VkResult err) { + //std::cout << err << std::endl; +} + namespace KaguEngine { -ImGuiContext::ImGuiContext(Window &window, SwapChain &swapChain, Device &device, std::unique_ptr &pool) : - poolRef{pool}, deviceRef{device}, swapChainRef{swapChain}, windowRef{window} { +ImGuiContext::ImGuiContext( + Window &window, SwapChain &swapChain, Device &device, + std::unique_ptr &pool, + Entity::Map& sceneEntities, std::vector& views, Camera& camera +) : + poolRef{pool}, viewsRef{views}, entitiesRef{sceneEntities}, cameraRef{camera}, deviceRef{device}, swapChainRef{swapChain}, windowRef{window} { IMGUI_CHECKVERSION(); ImGui::CreateContext(); setupConfigFlags(); @@ -42,7 +54,69 @@ void ImGuiContext::setupStyle() { style.WindowRounding = 0.0f; style.Colors[ImGuiCol_WindowBg].w = 1.0f; } - ImGui::StyleColorsDark(); + ImVec4* colors = style.Colors; + + // Corners + //style.WindowRounding = 8.0f; + //style.ChildRounding = 8.0f; + //style.FrameRounding = 6.0f; + //style.PopupRounding = 6.0f; + //style.ScrollbarRounding = 6.0f; + //style.GrabRounding = 6.0f; + style.TabRounding = 6.0f; + + // Colors + colors[ImGuiCol_Text] = ImVec4(0.95f, 0.96f, 0.98f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.36f, 0.42f, 0.47f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); + colors[ImGuiCol_ChildBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f); + colors[ImGuiCol_Border] = ImVec4(0.43f, 0.50f, 0.56f, 0.50f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_FrameBg] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.12f, 0.20f, 0.28f, 1.00f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.09f, 0.12f, 0.14f, 1.00f); + colors[ImGuiCol_TitleBg] = ImVec4(0.09f, 0.12f, 0.14f, 1.00f); + colors[ImGuiCol_TitleBgActive] = ImVec4(0.12f, 0.20f, 0.28f, 1.00f); + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); + colors[ImGuiCol_MenuBarBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f); + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f); + colors[ImGuiCol_CheckMark] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.37f, 0.61f, 1.00f, 1.00f); + colors[ImGuiCol_Button] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.37f, 0.61f, 1.00f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.20f, 0.25f, 0.29f, 0.55f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + colors[ImGuiCol_Separator] = ImVec4(0.43f, 0.50f, 0.56f, 0.50f); + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); + colors[ImGuiCol_Tab] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); + colors[ImGuiCol_TabHovered] = ImVec4(0.28f, 0.56f, 1.00f, 0.80f); + colors[ImGuiCol_TabActive] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); + colors[ImGuiCol_TabUnfocused] = ImVec4(0.07f, 0.10f, 0.15f, 0.97f); + colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.14f, 0.22f, 0.36f, 1.00f); + colors[ImGuiCol_DockingPreview] = ImVec4(0.26f, 0.59f, 0.98f, 0.70f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.20f, 0.20f, 0.20f, 1.00f); + colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); + colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 0.00f, 0.00f, 0.90f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); + io.FontDefault = io.Fonts->AddFontFromFileTTF("assets/fonts/roboto/Roboto-Regular.ttf", 18.0f); } void ImGuiContext::setupContext() const { @@ -62,9 +136,8 @@ void ImGuiContext::setupContext() const { init_info.MinImageCount = SwapChain::MAX_FRAMES_IN_FLIGHT; init_info.MSAASamples = deviceRef.getSampleCount(); init_info.ImageCount = SwapChain::MAX_FRAMES_IN_FLIGHT; - //init_info.CheckVkResultFn = check_vk_result; + init_info.CheckVkResultFn = check_result; ImGui_ImplVulkan_Init(&init_info); - ImGui_ImplVulkan_CreateFontsTexture(); } @@ -72,7 +145,7 @@ void ImGuiContext::recreateSwapChain() const { ImGui_ImplVulkan_SetMinImageCount(SwapChain::MAX_FRAMES_IN_FLIGHT); } -void ImGuiContext::render(Renderer& renderer) { +void ImGuiContext::render(const Renderer& renderer) { beginRender(); onRender(renderer); } @@ -83,36 +156,182 @@ void ImGuiContext::beginRender() { ImGui::NewFrame(); } -void ImGuiContext::onRender(Renderer& renderer) { - // Main viewport init +void ImGuiContext::onRender(const Renderer& renderer) { + const ImGuiViewport* viewport = setupViewport(); + const ImGuiID dockspace_id = setDockspaceID(); + + static bool dockspaceInitialized = false; + if (!dockspaceInitialized) { + initializeDockspace(dockspace_id, viewport); + dockspaceInitialized = true; + } + + moveSceneEntities(); + render3DScene(renderer); + renderSceneSpecs(); + // Demo + ImGui::ShowDemoWindow(); +} + +ImGuiViewport* ImGuiContext::setupViewport() { ImGuiViewport* viewport = ImGui::GetMainViewport(); ImGui::SetNextWindowPos(viewport->WorkPos); ImGui::SetNextWindowSize(viewport->WorkSize); ImGui::SetNextWindowViewport(viewport->ID); + return viewport; +} +ImGuiID ImGuiContext::setDockspaceID() { constexpr ImGuiWindowFlags hostFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoDocking; - // Dockspace ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); ImGui::Begin("DockSpaceHost", nullptr, hostFlags); ImGuiID dockspace_id = ImGui::GetID("MyDockspace"); - ImGui::DockSpace(dockspace_id, ImVec2(0, 0), ImGuiDockNodeFlags_PassthruCentralNode); + ImGui::DockSpace(dockspace_id, ImVec2(0, 0), ImGuiDockNodeFlags_PassthruCentralNode | ImGuiDockNodeFlags_AutoHideTabBar); ImGui::End(); ImGui::PopStyleVar(); + return dockspace_id; +} + +void ImGuiContext::initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport) { + ImGui::DockBuilderRemoveNode(dockspace_id); + ImGui::DockBuilderAddNode(dockspace_id, ImGuiDockNodeFlags_DockSpace | ImGuiDockNodeFlags_AutoHideTabBar); + ImGui::DockBuilderSetNodeSize(dockspace_id, viewport->WorkSize); + + ImGuiID dock_id_demo, dock_id_specs, dock_id_viewport; + ImGui::DockBuilderSplitNode(dockspace_id, ImGuiDir_Left, 0.2f, &dock_id_demo, &dock_id_viewport); + ImGui::DockBuilderSplitNode(dock_id_viewport, ImGuiDir_Right, 0.25f, &dock_id_specs, &dock_id_viewport); + + // Set the flag using internal node access + if (ImGuiDockNode* node = ImGui::DockBuilderGetNode(dock_id_demo)) + node->LocalFlags |= ImGuiDockNodeFlags_AutoHideTabBar; + if (ImGuiDockNode* node = ImGui::DockBuilderGetNode(dock_id_specs)) + node->LocalFlags |= ImGuiDockNodeFlags_AutoHideTabBar; + if (ImGuiDockNode* node = ImGui::DockBuilderGetNode(dock_id_viewport)) + node->LocalFlags |= ImGuiDockNodeFlags_AutoHideTabBar; + + ImGui::DockBuilderDockWindow("3D Scene", dock_id_viewport); + ImGui::DockBuilderDockWindow("Scene specs", dock_id_specs); + ImGui::DockBuilderDockWindow("Dear ImGui Demo", dock_id_demo); - // Scene viewport + ImGui::DockBuilderFinish(dockspace_id); +} + +void ImGuiContext::render3DScene(const Renderer& renderer) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); - ImGui::Begin("Viewport", nullptr, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); - ImVec2 availableSpace = ImGui::GetContentRegionAvail(); + ImGui::Begin("3D Scene", nullptr, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoMove); + const ImVec2 availableSpace = ImGui::GetContentRegionAvail(); ImGui::Image(reinterpret_cast(renderer.getOffscreenImGuiDescriptorSet()), availableSpace); ImGui::End(); ImGui::PopStyleVar(); +} - // Demo - ImGui::ShowDemoWindow(); +inline void DrawVec3Control(const std::string& label, glm::vec3& values, const glm::vec3 resetValue = {0.0f, 0.0f, 0.0f}, const float columnWidth = 180.0f, const bool isLight = false) { + ImGui::PushID(label.c_str()); + std::string x = "X", y = "Y", z = "Z"; + if(isLight){ x = "R"; y = "G"; z = "B"; } + const std::string hashX = "##" + x; + const std::string hashY = "##" + y; + const std::string hashZ = "##" + z; + + if (ImGui::BeginTable("Vec3Table", 2, ImGuiTableFlags_SizingFixedFit)) + { + ImGui::TableSetupColumn("Label", ImGuiTableColumnFlags_WidthFixed, columnWidth); + ImGui::TableSetupColumn("Controls", ImGuiTableColumnFlags_WidthStretch); + + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); + ImGui::Text("%s", label.c_str()); + + ImGui::TableSetColumnIndex(1); + + ImGui::PushMultiItemsWidths(3, ImGui::CalcItemWidth()); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2{ 0, 0 }); + + const float lineHeight = ImGui::GetFont()->FontSize + ImGui::GetStyle().FramePadding.y * 2.0f; + const ImVec2 buttonSize = { lineHeight + 3.0f, lineHeight }; + + // X + if (ImGui::Button(x.c_str(), buttonSize)) + values.x = resetValue.x; + ImGui::SameLine(); + ImGui::DragFloat(hashX.c_str(), &values.x, 0.1f, 0.0f, 0.0f, "%.2f"); + ImGui::PopItemWidth(); + + ImGui::SameLine(); + // Y + if (ImGui::Button(y.c_str(), buttonSize)) + values.y = resetValue.y; + ImGui::SameLine(); + ImGui::DragFloat(hashY.c_str(), &values.y, 0.1f, 0.0f, 0.0f, "%.2f"); + ImGui::PopItemWidth(); + + ImGui::SameLine(); + // Z + if (ImGui::Button(z.c_str(), buttonSize)) + values.z = resetValue.z; + ImGui::SameLine(); + ImGui::DragFloat(hashZ.c_str(), &values.z, 0.1f, 0.0f, 0.0f, "%.2f"); + ImGui::PopItemWidth(); + + ImGui::PopStyleVar(); + + ImGui::EndTable(); + } + + ImGui::PopID(); +} + +void ImGuiContext::moveSceneEntities() { + static bool open = true; + ImGui::Begin("Entities", &open); + for (auto &[id, entity] : entitiesRef) { + std::string headerLabel; + if (entity.pointLight != nullptr) { + headerLabel = "Point light " + std::to_string(id); + } + else { + headerLabel = entity.name; + } + if (ImGui::CollapsingHeader(headerLabel.c_str())) { + ImGui::PushID(static_cast(id)); + + if (entity.pointLight != nullptr) { + DrawVec3Control("Color", entity.color, {0, 0, 0}, 180, true); + } + else { + DrawVec3Control("Translation", entity.transform.translation); + DrawVec3Control("Rotation", entity.transform.rotation); + DrawVec3Control("Scale", entity.transform.scale); + } + + ImGui::PopID(); + } + } + ImGui::End(); +} + +void ImGuiContext::renderSceneSpecs() { + static float a = 1.f; + static float b = 50.f; + static float c = 100.f; + ImGui::Begin("Scene specs", nullptr); + ImGui::SliderFloat("Depth", &m_MaxDepth, 1.0f, 100.f); + ImGui::SliderFloat("FOV-Y", &m_FovY, 30.f, 120.f); + ImGui::SliderInt("Camera index", &m_camIdx, 0, 1); + if (ImGui::CollapsingHeader("Models")) { + ImGui::SliderFloat("Model", &a, 1.0f, 100.f); + } + if (ImGui::CollapsingHeader("Textures")) { + ImGui::SliderFloat("Texture", &b, 1.0f, 100.f); + } + if (ImGui::CollapsingHeader("Point lights")) { + ImGui::SliderFloat("Point light", &c, 1.0f, 100.f); + } + ImGui::End(); } void ImGuiContext::onPresent(VkCommandBuffer commandBuffer) { diff --git a/KaguEngine/src/ImGuiContext.ixx b/KaguEngine/src/ImGuiContext.ixx index 095ed85..dbbb55e 100644 --- a/KaguEngine/src/ImGuiContext.ixx +++ b/KaguEngine/src/ImGuiContext.ixx @@ -1,5 +1,7 @@ module; +// libs +#include #include export module KaguEngine.ImGuiContext; @@ -7,8 +9,10 @@ export module KaguEngine.ImGuiContext; // std import std; +import KaguEngine.Camera; import KaguEngine.Descriptor; import KaguEngine.Device; +import KaguEngine.Entity; import KaguEngine.SwapChain; import KaguEngine.Renderer; import KaguEngine.Window; @@ -18,25 +22,48 @@ export namespace KaguEngine { class ImGuiContext { public: - ImGuiContext(Window &window, SwapChain &swapChain, Device &device, std::unique_ptr &pool); + ImGuiContext( + Window &window, SwapChain &swapChain, Device &device, + std::unique_ptr &pool, + Entity::Map& sceneEntities, std::vector& views, Camera& camera + ); ~ImGuiContext(); void recreateSwapChain() const; - void render(Renderer& renderer); + void render(const Renderer& renderer); void onPresent(VkCommandBuffer commandBuffer); + // Specs + [[nodiscard]] float getDepth() const { return m_MaxDepth; } + [[nodiscard]] float getFovY() const { return m_FovY; } + [[nodiscard]] int getCamIdx() const { return m_camIdx; } + private: void setupContext() const; void setupConfigFlags(); void setupStyle(); void beginRender(); - void onRender(Renderer& renderer); + void onRender(const Renderer& renderer); + ImGuiViewport* setupViewport(); + ImGuiID setDockspaceID(); + void initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport); + void render3DScene(const Renderer& renderer); + void moveSceneEntities(); + void renderSceneSpecs(); void endRender(); std::unique_ptr &poolRef; + std::vector &viewsRef; + Entity::Map &entitiesRef; + Camera &cameraRef; Device &deviceRef; SwapChain &swapChainRef; Window &windowRef; + + // Specs + float m_MaxDepth = 100.f; + float m_FovY = 50.f; + int m_camIdx = 0; }; } \ No newline at end of file diff --git a/KaguEngine/src/Window.cpp b/KaguEngine/src/Window.cpp index cc835df..1cfb275 100644 --- a/KaguEngine/src/Window.cpp +++ b/KaguEngine/src/Window.cpp @@ -32,7 +32,10 @@ void Window::initWindow() { glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); glfwWindowHint(GLFW_DECORATED, GLFW_TRUE); // GLFW_FALSE when GUI - m_Window = glfwCreateWindow(mode->width / 2, mode->height / 2, m_WindowName.c_str(), nullptr, nullptr); + int width, height; + setWindowDimensions(mode, width, height); + + m_Window = glfwCreateWindow(width, height, m_WindowName.c_str(), nullptr, nullptr); centerWindow(m_Window, monitor); glfwSetWindowUserPointer(m_Window, this); glfwSetFramebufferSizeCallback(m_Window, framebufferResizeCallback); @@ -44,6 +47,21 @@ void Window::createWindowSurface(const VkInstance instance, VkSurfaceKHR* surfac } } +void Window::setWindowDimensions(const GLFWvidmode* mode, int& width, int& height) { + if (mode->height < 900) { + height = mode->height / 2; + } + else { + height = m_Height; + } + if (mode->width < m_Width) { + width = mode->width / 2; + } + else { + width = m_Width; + } +} + void Window::centerWindow(GLFWwindow *window, GLFWmonitor *monitor) { if (!monitor) return; diff --git a/KaguEngine/src/Window.ixx b/KaguEngine/src/Window.ixx index b626fb0..464a486 100644 --- a/KaguEngine/src/Window.ixx +++ b/KaguEngine/src/Window.ixx @@ -33,6 +33,7 @@ public: private: static void framebufferResizeCallback(GLFWwindow *window, int width, int height); void initWindow(); + void setWindowDimensions(const GLFWvidmode* mode, int& width, int& height); void centerWindow(GLFWwindow *window, GLFWmonitor *monitor); int m_Width; From 1869b4287d983520f10c8255bda15d80923f0448 Mon Sep 17 00:00:00 2001 From: dark-dylan-dev Date: Wed, 25 Jun 2025 01:23:49 +0200 Subject: [PATCH 2/3] [ADD] FontAwesome * Better App theme * Main menu bar (yet to be finished) --- KaguEngine/src/ImGuiContext.cpp | 323 ++++++++--- KaguEngine/src/ImGuiContext.ixx | 36 +- KaguEngine/src/include/LICENSE.txt | 17 + KaguEngine/src/include/font_awesome.hpp | 683 ++++++++++++++++++++++++ 4 files changed, 962 insertions(+), 97 deletions(-) create mode 100644 KaguEngine/src/include/LICENSE.txt create mode 100644 KaguEngine/src/include/font_awesome.hpp diff --git a/KaguEngine/src/ImGuiContext.cpp b/KaguEngine/src/ImGuiContext.cpp index 3337ecb..f1bca51 100644 --- a/KaguEngine/src/ImGuiContext.cpp +++ b/KaguEngine/src/ImGuiContext.cpp @@ -1,6 +1,7 @@ module; // libs +#include "include/font_awesome.hpp" #include "include/imgui_includes.hpp" #include @@ -54,69 +55,23 @@ void ImGuiContext::setupStyle() { style.WindowRounding = 0.0f; style.Colors[ImGuiCol_WindowBg].w = 1.0f; } - ImVec4* colors = style.Colors; - - // Corners - //style.WindowRounding = 8.0f; - //style.ChildRounding = 8.0f; - //style.FrameRounding = 6.0f; - //style.PopupRounding = 6.0f; - //style.ScrollbarRounding = 6.0f; - //style.GrabRounding = 6.0f; - style.TabRounding = 6.0f; - - // Colors - colors[ImGuiCol_Text] = ImVec4(0.95f, 0.96f, 0.98f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.36f, 0.42f, 0.47f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); - colors[ImGuiCol_ChildBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f); - colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f); - colors[ImGuiCol_Border] = ImVec4(0.43f, 0.50f, 0.56f, 0.50f); - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_FrameBg] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.12f, 0.20f, 0.28f, 1.00f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.09f, 0.12f, 0.14f, 1.00f); - colors[ImGuiCol_TitleBg] = ImVec4(0.09f, 0.12f, 0.14f, 1.00f); - colors[ImGuiCol_TitleBgActive] = ImVec4(0.12f, 0.20f, 0.28f, 1.00f); - colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); - colors[ImGuiCol_MenuBarBg] = ImVec4(0.15f, 0.18f, 0.22f, 1.00f); - colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f); - colors[ImGuiCol_CheckMark] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); - colors[ImGuiCol_SliderGrab] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.37f, 0.61f, 1.00f, 1.00f); - colors[ImGuiCol_Button] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); - colors[ImGuiCol_ButtonHovered] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f); - colors[ImGuiCol_ButtonActive] = ImVec4(0.37f, 0.61f, 1.00f, 1.00f); - colors[ImGuiCol_Header] = ImVec4(0.20f, 0.25f, 0.29f, 0.55f); - colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f); - colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_Separator] = ImVec4(0.43f, 0.50f, 0.56f, 0.50f); - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); - colors[ImGuiCol_Tab] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f); - colors[ImGuiCol_TabHovered] = ImVec4(0.28f, 0.56f, 1.00f, 0.80f); - colors[ImGuiCol_TabActive] = ImVec4(0.20f, 0.25f, 0.29f, 1.00f); - colors[ImGuiCol_TabUnfocused] = ImVec4(0.07f, 0.10f, 0.15f, 0.97f); - colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.14f, 0.22f, 0.36f, 1.00f); - colors[ImGuiCol_DockingPreview] = ImVec4(0.26f, 0.59f, 0.98f, 0.70f); - colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.20f, 0.20f, 0.20f, 1.00f); - colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); - colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 0.00f, 0.00f, 0.90f); - colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); - io.FontDefault = io.Fonts->AddFontFromFileTTF("assets/fonts/roboto/Roboto-Regular.ttf", 18.0f); + + // Fonts sizes + constexpr float baseFontSize = 18.0f; + constexpr float iconFontSize = baseFontSize * 2.0f / 3.0f; + // Base regular font + io.FontDefault = io.Fonts->AddFontFromFileTTF("assets/fonts/roboto/Roboto-Regular.ttf", baseFontSize); + // Icons font + ImFontConfig icons_config; + icons_config.MergeMode = true; + icons_config.PixelSnapH = true; + icons_config.GlyphMinAdvanceX = iconFontSize; + static constexpr ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_16_FA, 0 }; + io.Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_FA, iconFontSize, &icons_config, icons_ranges); + + // Theme + Style + setAppTheme(); + setStyleVars(); } void ImGuiContext::setupContext() const { @@ -141,7 +96,176 @@ void ImGuiContext::setupContext() const { ImGui_ImplVulkan_CreateFontsTexture(); } -void ImGuiContext::recreateSwapChain() const { +void ImGuiContext::setStyleVars() { + ImGuiStyle& style = ImGui::GetStyle(); + + // === Main === + style.WindowPadding = ImVec2(8, 8); + style.FramePadding = ImVec2(4, 4); + style.ItemSpacing = ImVec2(8, 4); + style.ItemInnerSpacing = ImVec2(4, 4); + style.TouchExtraPadding = ImVec2(4, 4); + style.IndentSpacing = 21.0f; + style.ScrollbarSize = 14.0f; + style.GrabMinSize = 12.0f; + + // === Borders === + style.WindowBorderSize = 1.0f; + style.ChildBorderSize = 0.0f; + style.PopupBorderSize = 1.0f; + style.FrameBorderSize = 0.0f; + + // === Rounding === + style.WindowRounding = 0.0f; + style.ChildRounding = 0.0f; + style.FrameRounding = 8.0f; + style.PopupRounding = 8.0f; + style.ScrollbarRounding = 8.0f; + style.GrabRounding = 8.0f; + + // === Tabs === + style.TabBorderSize = 0.0f; + style.TabBarBorderSize = 0.0f; + style.TabBarOverlineSize = 0.0f; + style.TabCloseButtonMinWidthSelected = -1.0f; // Always + style.TabCloseButtonMinWidthUnselected = 0.0f; + style.TabRounding = 0.0f; + + // === Tables === + style.CellPadding = ImVec2(4, 2); + style.TableAngledHeadersAngle = 35.0f; // degrees + style.TableAngledHeadersTextAlign = ImVec2(0.50f, 0.00f); // center + + // === Trees === + style.TreeLinesFlags = ImGuiTreeNodeFlags_None; // DrawLinesNone + style.TreeLinesSize = 0.0f; + style.TreeLinesRounding = 0.0f; + + // === Windows === + style.WindowTitleAlign = ImVec2(0.00f, 0.50f); + style.WindowMenuButtonPosition = ImGuiDir_None; + style.WindowBorderHoverPadding = 5.0f; + + // === Widgets === + style.ColorButtonPosition = ImGuiDir_Right; + style.ButtonTextAlign = ImVec2(0.50f, 0.50f); + style.SelectableTextAlign = ImVec2(0.00f, 0.00f); + style.SeparatorTextBorderSize = 3.0f; + style.SeparatorTextAlign = ImVec2(0.00f, 0.50f); + style.SeparatorTextPadding = ImVec2(20.0f, 3.0f); + style.LogSliderDeadzone = 4.0f; + style.ImageBorderSize = 0.0f; + + // === Docking === + style.DockingSeparatorSize = 2.0f; + + // === Misc === + style.DisplayWindowPadding = ImVec2(19, 19); + style.DisplaySafeAreaPadding = ImVec2(3, 3); +} + +void ImGuiContext::setAppTheme() { + ImVec4* colors = ImGui::GetStyle().Colors; + + // ---- Text ---- + colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Main text (white) + colors[ImGuiCol_TextDisabled] = ImVec4(0.56f, 0.59f, 0.65f, 1.00f); // Disabled text (gray) + + // ---- Backgrounds ---- + colors[ImGuiCol_WindowBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f); // Window background + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); // Child window background + colors[ImGuiCol_PopupBg] = ImVec4(0.12f, 0.12f, 0.12f, 1.00f); // Popup/tooltip background + + // ---- Borders ---- + colors[ImGuiCol_Border] = ImVec4(0.20f, 0.20f, 0.23f, 1.00f); // Borders + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); // Border shadow (unused) + + // ---- Frame Backgrounds (Inputs, etc) ---- + colors[ImGuiCol_FrameBg] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Input fields, etc. + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); // Input hover + colors[ImGuiCol_FrameBgActive] = ImVec4(0.22f, 0.22f, 0.22f, 1.00f); // Input active + + // ---- Title Bar ---- + colors[ImGuiCol_TitleBg] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Title bar background (inactive/active) + colors[ImGuiCol_TitleBgActive] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Title bar background (active) + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.13f, 0.14f, 0.16f, 1.00f); // Title bar background (collapsed) + + // ---- Menu Bar ---- + colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); // Menu bar background + + // ---- Scrollbar ---- + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.11f, 0.12f, 0.13f, 1.00f); // Scrollbar background + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.18f, 0.20f, 0.25f, 1.00f); // Scrollbar grab + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.30f, 0.31f, 0.37f, 1.00f); // Scrollbar grab (hover) + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.52f, 0.53f, 0.57f, 1.00f); // Scrollbar grab (active) + + // ---- Controls: Check, Slider, Button ---- + colors[ImGuiCol_CheckMark] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Checkbox check mark (white) + colors[ImGuiCol_SliderGrab] = ImVec4(0.46f, 0.49f, 0.55f, 1.00f); // Slider grab + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.27f, 0.30f, 0.38f, 1.00f); // Slider grab (active) + + colors[ImGuiCol_Button] = ImVec4(0.11f, 0.11f, 0.11f, 1.00f); // Button + colors[ImGuiCol_ButtonHovered] = ImVec4(0.25f, 0.31f, 0.44f, 1.00f); // Button (hover) + colors[ImGuiCol_ButtonActive] = ImVec4(0.27f, 0.39f, 0.64f, 1.00f); // Button (active) + + // ---- Headers & Collapsing ---- + colors[ImGuiCol_Header] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Header (tree, table, etc.) + colors[ImGuiCol_HeaderHovered] = ImVec4(0.25f, 0.31f, 0.44f, 1.00f); // Header (hover) + colors[ImGuiCol_HeaderActive] = ImVec4(0.27f, 0.39f, 0.64f, 1.00f); // Header (active) + + // ---- Separators ---- + colors[ImGuiCol_Separator] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Separator line + colors[ImGuiCol_SeparatorHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Separator (hover) + colors[ImGuiCol_SeparatorActive] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Separator (active) + + // ---- Resize Grips ---- + colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Resize grip + colors[ImGuiCol_ResizeGripHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Resize grip (hover) + colors[ImGuiCol_ResizeGripActive] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Resize grip (active) + + // ---- Input Text Cursor ---- + colors[ImGuiCol_InputTextCursor] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Input text cursor + + // ---- Tabs ---- + colors[ImGuiCol_Tab] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); // Tab background + colors[ImGuiCol_TabHovered] = ImVec4(0.26f, 0.33f, 0.48f, 1.00f); // Tab (hover) + colors[ImGuiCol_TabSelected] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f); // Tab (selected) + colors[ImGuiCol_TabSelectedOverline] = ImVec4(1.00f, 1.00f, 1.00f, 0.00f); // Tab (selected overline) + colors[ImGuiCol_TabDimmed] = ImVec4(0.12f, 0.13f, 0.14f, 1.00f); // Tab (dimmed) + colors[ImGuiCol_TabDimmedSelected] = ImVec4(0.40f, 0.40f, 0.40f, 1.00f); // Tab (dimmed selected) + colors[ImGuiCol_TabDimmedSelectedOverline] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); // Tab (dimmed selected overline) + + // ---- Docking ---- + colors[ImGuiCol_DockingPreview] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Docking preview highlight + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.11f, 0.12f, 0.13f, 1.00f); // Dockspace background + + // ---- Plots ---- + colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Line plot + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Line plot (hover) + colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Histogram bar + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Histogram bar (hover) + + // ---- Tables ---- + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.17f, 0.20f, 0.27f, 1.00f); // Table header + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.18f, 0.21f, 0.30f, 1.00f); // Table strong border + colors[ImGuiCol_TableBorderLight] = ImVec4(0.16f, 0.18f, 0.24f, 1.00f); // Table light border + colors[ImGuiCol_TableRowBg] = ImVec4(0.15f, 0.16f, 0.20f, 1.00f); // Table row + colors[ImGuiCol_TableRowBgAlt] = ImVec4(0.15f, 0.16f, 0.20f, 1.00f); // Table row (alternate) + + // ---- Misc/Links/Selection ---- + colors[ImGuiCol_TextLink] = ImVec4(0.36f, 0.57f, 1.00f, 1.00f); // Hyperlink color + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.50f, 0.66f, 1.00f, 1.00f); // Text selection background + colors[ImGuiCol_TreeLines] = ImVec4(0.22f, 0.24f, 0.32f, 1.00f); // Tree node lines + + // ---- Drag & Navigation ---- + colors[ImGuiCol_DragDropTarget] = ImVec4(0.36f, 0.57f, 1.00f, 1.00f); // Drag-drop target + colors[ImGuiCol_NavCursor] = ImVec4(0.49f, 0.66f, 1.00f, 1.00f); // Navigation cursor + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); // Windowing highlight + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.18f, 0.18f, 0.22f, 0.20f); // Windowing dim background + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.10f, 0.12f, 0.18f, 0.45f); // Modal window dim background +} + +void ImGuiContext::recreateSwapChain() { ImGui_ImplVulkan_SetMinImageCount(SwapChain::MAX_FRAMES_IN_FLIGHT); } @@ -166,7 +290,6 @@ void ImGuiContext::onRender(const Renderer& renderer) { dockspaceInitialized = true; } - moveSceneEntities(); render3DScene(renderer); renderSceneSpecs(); // Demo @@ -191,6 +314,7 @@ ImGuiID ImGuiContext::setDockspaceID() { ImGui::Begin("DockSpaceHost", nullptr, hostFlags); ImGuiID dockspace_id = ImGui::GetID("MyDockspace"); ImGui::DockSpace(dockspace_id, ImVec2(0, 0), ImGuiDockNodeFlags_PassthruCentralNode | ImGuiDockNodeFlags_AutoHideTabBar); + drawMainMenuBar(); ImGui::End(); ImGui::PopStyleVar(); return dockspace_id; @@ -220,6 +344,53 @@ void ImGuiContext::initializeDockspace(const ImGuiID& dockspace_id, const ImGuiV ImGui::DockBuilderFinish(dockspace_id); } +void ImGuiContext::drawMainMenuBar() { + const ImGuiIO& io = ImGui::GetIO(); + ImGui::PushStyleVarY(ImGuiStyleVar_FramePadding, 5.f); + ImGui::PushFont(io.Fonts->Fonts[0]); + if (ImGui::BeginMainMenuBar()) { + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(12, 8)); + if (ImGui::BeginMenu((std::string(ICON_FA_FILE) + " File").c_str())) { + if (ImGui::BeginMenu((std::string(ICON_FA_FILE_ARCHIVE_O) + " Save").c_str())) { + if (ImGui::MenuItem((std::string(ICON_FA_CHECK) + " Save Current").c_str(), "Ctrl+S")) { + // TODO: Save scene + } + if (ImGui::MenuItem((std::string(ICON_FA_QUESTION) + " Save As...").c_str(), "Ctrl+Maj+S")) { + // TODO: Save scene as + } + ImGui::EndMenu(); + } + if (ImGui::MenuItem((std::string(ICON_FA_FOLDER_OPEN) + " Open").c_str(), "Ctrl+O")) { + // TODO: OpenScene(path) + } + if (ImGui::MenuItem((std::string(ICON_FA_CHECK) + " New").c_str(), "Ctrl+N")) { + // TODO: New scene + } + if (ImGui::MenuItem((std::string(ICON_FA_CROSSHAIRS) + " Close").c_str(), "Ctrl+W")) { + // TODO: Close scene + } + if (ImGui::MenuItem((std::string(ICON_FA_WINDOW_CLOSE) + " Exit").c_str() , "Ctrl+Q")) { + // TODO: Close window + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu((std::string(ICON_FA_TASKS) + " Window").c_str())) { + if (ImGui::BeginMenu("Theme")) { + if (ImGui::MenuItem((std::string("App Theme ") + ICON_FA_GITHUB).c_str())) {setAppTheme();setStyleVars();} + if (ImGui::MenuItem((std::string("ImGui Dark ") + ICON_FA_MOON_O).c_str())) ImGui::StyleColorsDark(); + if (ImGui::MenuItem((std::string("ImGuiLight ") + ICON_FA_SUN_O).c_str())) ImGui::StyleColorsLight(); + if (ImGui::MenuItem((std::string("ImGuiClassic ") + ICON_FA_SMILE_O).c_str())) ImGui::StyleColorsClassic(); + ImGui::EndMenu(); + } + ImGui::EndMenu(); + } + ImGui::PopStyleVar(); + ImGui::EndMainMenuBar(); + } + ImGui::PopFont(); + ImGui::PopStyleVar(); +} + void ImGuiContext::render3DScene(const Renderer& renderer) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); ImGui::Begin("3D Scene", nullptr, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoMove); @@ -285,9 +456,8 @@ inline void DrawVec3Control(const std::string& label, glm::vec3& values, const g ImGui::PopID(); } -void ImGuiContext::moveSceneEntities() { - static bool open = true; - ImGui::Begin("Entities", &open); +void ImGuiContext::moveSceneEntities() const { + ImGui::Begin("Entities"); for (auto &[id, entity] : entitiesRef) { std::string headerLabel; if (entity.pointLight != nullptr) { @@ -315,23 +485,12 @@ void ImGuiContext::moveSceneEntities() { } void ImGuiContext::renderSceneSpecs() { - static float a = 1.f; - static float b = 50.f; - static float c = 100.f; ImGui::Begin("Scene specs", nullptr); - ImGui::SliderFloat("Depth", &m_MaxDepth, 1.0f, 100.f); - ImGui::SliderFloat("FOV-Y", &m_FovY, 30.f, 120.f); + ImGui::SliderFloat("Depth", &m_MaxDepth[m_camIdx], 1.0f, 100.f); + ImGui::SliderFloat("FOV-Y", &m_FovY[m_camIdx], 30.f, 120.f); ImGui::SliderInt("Camera index", &m_camIdx, 0, 1); - if (ImGui::CollapsingHeader("Models")) { - ImGui::SliderFloat("Model", &a, 1.0f, 100.f); - } - if (ImGui::CollapsingHeader("Textures")) { - ImGui::SliderFloat("Texture", &b, 1.0f, 100.f); - } - if (ImGui::CollapsingHeader("Point lights")) { - ImGui::SliderFloat("Point light", &c, 1.0f, 100.f); - } ImGui::End(); + moveSceneEntities(); } void ImGuiContext::onPresent(VkCommandBuffer commandBuffer) { diff --git a/KaguEngine/src/ImGuiContext.ixx b/KaguEngine/src/ImGuiContext.ixx index dbbb55e..d269119 100644 --- a/KaguEngine/src/ImGuiContext.ixx +++ b/KaguEngine/src/ImGuiContext.ixx @@ -29,28 +29,34 @@ public: ); ~ImGuiContext(); - void recreateSwapChain() const; + static void recreateSwapChain(); void render(const Renderer& renderer); - void onPresent(VkCommandBuffer commandBuffer); + + static void onPresent(VkCommandBuffer commandBuffer); // Specs - [[nodiscard]] float getDepth() const { return m_MaxDepth; } - [[nodiscard]] float getFovY() const { return m_FovY; } + [[nodiscard]] float getDepth() const { return m_MaxDepth[m_camIdx]; } + [[nodiscard]] float getFovY() const { return m_FovY[m_camIdx]; } [[nodiscard]] int getCamIdx() const { return m_camIdx; } private: + // Setup part + static void setupConfigFlags(); + static void setupStyle(); + static void setAppTheme(); + static void setStyleVars(); void setupContext() const; - void setupConfigFlags(); - void setupStyle(); - void beginRender(); + static void initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport); + // Rendering part + static void beginRender(); void onRender(const Renderer& renderer); - ImGuiViewport* setupViewport(); - ImGuiID setDockspaceID(); - void initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport); - void render3DScene(const Renderer& renderer); - void moveSceneEntities(); + static ImGuiViewport* setupViewport(); + static ImGuiID setDockspaceID(); + static void drawMainMenuBar(); + static void render3DScene(const Renderer& renderer); + void moveSceneEntities() const; void renderSceneSpecs(); - void endRender(); + static void endRender(); std::unique_ptr &poolRef; std::vector &viewsRef; @@ -61,8 +67,8 @@ private: Window &windowRef; // Specs - float m_MaxDepth = 100.f; - float m_FovY = 50.f; + std::vector m_MaxDepth = { 100.f, 100.f }; + std::vector m_FovY = { 50.f, 50.f }; int m_camIdx = 0; }; diff --git a/KaguEngine/src/include/LICENSE.txt b/KaguEngine/src/include/LICENSE.txt new file mode 100644 index 0000000..59ec22b --- /dev/null +++ b/KaguEngine/src/include/LICENSE.txt @@ -0,0 +1,17 @@ +Copyright (c) 2017 Juliette Foucaut and Doug Binks + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/KaguEngine/src/include/font_awesome.hpp b/KaguEngine/src/include/font_awesome.hpp new file mode 100644 index 0000000..509f80a --- /dev/null +++ b/KaguEngine/src/include/font_awesome.hpp @@ -0,0 +1,683 @@ +#pragma once + +auto inline FONT_ICON_FILE_NAME_FA = "assets/fonts/fontawesome/fontawesome.ttf"; + +constexpr int ICON_MIN_FA = 0xf000; +constexpr int ICON_MAX_16_FA = 0xf2e0; +constexpr int ICON_MAX_FA = 0xf2e0; + +auto inline ICON_FA_GLASS = "\xef\x80\x80"; +auto inline ICON_FA_MUSIC = "\xef\x80\x81"; +auto inline ICON_FA_SEARCH = "\xef\x80\x82"; +auto inline ICON_FA_ENVELOPE_O = "\xef\x80\x83"; +auto inline ICON_FA_HEART = "\xef\x80\x84"; +auto inline ICON_FA_STAR = "\xef\x80\x85"; +auto inline ICON_FA_STAR_O = "\xef\x80\x86"; +auto inline ICON_FA_USER = "\xef\x80\x87"; +auto inline ICON_FA_FILM = "\xef\x80\x88"; +auto inline ICON_FA_TH_LARGE = "\xef\x80\x89"; +auto inline ICON_FA_TH = "\xef\x80\x8a"; +auto inline ICON_FA_TH_LIST = "\xef\x80\x8b"; +auto inline ICON_FA_CHECK = "\xef\x80\x8c"; +auto inline ICON_FA_TIMES = "\xef\x80\x8d"; +auto inline ICON_FA_SEARCH_PLUS = "\xef\x80\x8e"; +auto inline ICON_FA_SEARCH_MINUS = "\xef\x80\x90"; +auto inline ICON_FA_POWER_OFF = "\xef\x80\x91"; +auto inline ICON_FA_SIGNAL = "\xef\x80\x92"; +auto inline ICON_FA_COG = "\xef\x80\x93"; +auto inline ICON_FA_TRASH_O = "\xef\x80\x94"; +auto inline ICON_FA_HOME = "\xef\x80\x95"; +auto inline ICON_FA_FILE_O = "\xef\x80\x96"; +auto inline ICON_FA_CLOCK_O = "\xef\x80\x97"; +auto inline ICON_FA_ROAD = "\xef\x80\x98"; +auto inline ICON_FA_DOWNLOAD = "\xef\x80\x99"; +auto inline ICON_FA_ARROW_CIRCLE_O_DOWN = "\xef\x80\x9a"; +auto inline ICON_FA_ARROW_CIRCLE_O_UP = "\xef\x80\x9b"; +auto inline ICON_FA_INBOX = "\xef\x80\x9c"; +auto inline ICON_FA_PLAY_CIRCLE_O = "\xef\x80\x9d"; +auto inline ICON_FA_REPEAT = "\xef\x80\x9e"; +auto inline ICON_FA_REFRESH = "\xef\x80\xa1"; +auto inline ICON_FA_LIST_ALT = "\xef\x80\xa2"; +auto inline ICON_FA_LOCK = "\xef\x80\xa3"; +auto inline ICON_FA_FLAG = "\xef\x80\xa4"; +auto inline ICON_FA_HEADPHONES = "\xef\x80\xa5"; +auto inline ICON_FA_VOLUME_OFF = "\xef\x80\xa6"; +auto inline ICON_FA_VOLUME_DOWN = "\xef\x80\xa7"; +auto inline ICON_FA_VOLUME_UP = "\xef\x80\xa8"; +auto inline ICON_FA_QRCODE = "\xef\x80\xa9"; +auto inline ICON_FA_BARCODE = "\xef\x80\xaa"; +auto inline ICON_FA_TAG = "\xef\x80\xab"; +auto inline ICON_FA_TAGS = "\xef\x80\xac"; +auto inline ICON_FA_BOOK = "\xef\x80\xad"; +auto inline ICON_FA_BOOKMARK = "\xef\x80\xae"; +auto inline ICON_FA_PRINT = "\xef\x80\xaf"; +auto inline ICON_FA_CAMERA = "\xef\x80\xb0"; +auto inline ICON_FA_FONT = "\xef\x80\xb1"; +auto inline ICON_FA_BOLD = "\xef\x80\xb2"; +auto inline ICON_FA_ITALIC = "\xef\x80\xb3"; +auto inline ICON_FA_TEXT_HEIGHT = "\xef\x80\xb4"; +auto inline ICON_FA_TEXT_WIDTH = "\xef\x80\xb5"; +auto inline ICON_FA_ALIGN_LEFT = "\xef\x80\xb6"; +auto inline ICON_FA_ALIGN_CENTER = "\xef\x80\xb7"; +auto inline ICON_FA_ALIGN_RIGHT = "\xef\x80\xb8"; +auto inline ICON_FA_ALIGN_JUSTIFY = "\xef\x80\xb9"; +auto inline ICON_FA_LIST = "\xef\x80\xba"; +auto inline ICON_FA_OUTDENT = "\xef\x80\xbb"; +auto inline ICON_FA_INDENT = "\xef\x80\xbc"; +auto inline ICON_FA_VIDEO_CAMERA = "\xef\x80\xbd"; +auto inline ICON_FA_PICTURE_O = "\xef\x80\xbe"; +auto inline ICON_FA_PENCIL = "\xef\x81\x80"; +auto inline ICON_FA_MAP_MARKER = "\xef\x81\x81"; +auto inline ICON_FA_ADJUST = "\xef\x81\x82"; +auto inline ICON_FA_TINT = "\xef\x81\x83"; +auto inline ICON_FA_PENCIL_SQUARE_O = "\xef\x81\x84"; +auto inline ICON_FA_SHARE_SQUARE_O = "\xef\x81\x85"; +auto inline ICON_FA_CHECK_SQUARE_O = "\xef\x81\x86"; +auto inline ICON_FA_ARROWS = "\xef\x81\x87"; +auto inline ICON_FA_STEP_BACKWARD = "\xef\x81\x88"; +auto inline ICON_FA_FAST_BACKWARD = "\xef\x81\x89"; +auto inline ICON_FA_BACKWARD = "\xef\x81\x8a"; +auto inline ICON_FA_PLAY = "\xef\x81\x8b"; +auto inline ICON_FA_PAUSE = "\xef\x81\x8c"; +auto inline ICON_FA_STOP = "\xef\x81\x8d"; +auto inline ICON_FA_FORWARD = "\xef\x81\x8e"; +auto inline ICON_FA_FAST_FORWARD = "\xef\x81\x90"; +auto inline ICON_FA_STEP_FORWARD = "\xef\x81\x91"; +auto inline ICON_FA_EJECT = "\xef\x81\x92"; +auto inline ICON_FA_CHEVRON_LEFT = "\xef\x81\x93"; +auto inline ICON_FA_CHEVRON_RIGHT = "\xef\x81\x94"; +auto inline ICON_FA_PLUS_CIRCLE = "\xef\x81\x95"; +auto inline ICON_FA_MINUS_CIRCLE = "\xef\x81\x96"; +auto inline ICON_FA_TIMES_CIRCLE = "\xef\x81\x97"; +auto inline ICON_FA_CHECK_CIRCLE = "\xef\x81\x98"; +auto inline ICON_FA_QUESTION_CIRCLE = "\xef\x81\x99"; +auto inline ICON_FA_INFO_CIRCLE = "\xef\x81\x9a"; +auto inline ICON_FA_CROSSHAIRS = "\xef\x81\x9b"; +auto inline ICON_FA_TIMES_CIRCLE_O = "\xef\x81\x9c"; +auto inline ICON_FA_CHECK_CIRCLE_O = "\xef\x81\x9d"; +auto inline ICON_FA_BAN = "\xef\x81\x9e"; +auto inline ICON_FA_ARROW_LEFT = "\xef\x81\xa0"; +auto inline ICON_FA_ARROW_RIGHT = "\xef\x81\xa1"; +auto inline ICON_FA_ARROW_UP = "\xef\x81\xa2"; +auto inline ICON_FA_ARROW_DOWN = "\xef\x81\xa3"; +auto inline ICON_FA_SHARE = "\xef\x81\xa4"; +auto inline ICON_FA_EXPAND = "\xef\x81\xa5"; +auto inline ICON_FA_COMPRESS = "\xef\x81\xa6"; +auto inline ICON_FA_PLUS = "\xef\x81\xa7"; +auto inline ICON_FA_MINUS = "\xef\x81\xa8"; +auto inline ICON_FA_ASTERISK = "\xef\x81\xa9"; +auto inline ICON_FA_EXCLAMATION_CIRCLE = "\xef\x81\xaa"; +auto inline ICON_FA_GIFT = "\xef\x81\xab"; +auto inline ICON_FA_LEAF = "\xef\x81\xac"; +auto inline ICON_FA_FIRE = "\xef\x81\xad"; +auto inline ICON_FA_EYE = "\xef\x81\xae"; +auto inline ICON_FA_EYE_SLASH = "\xef\x81\xb0"; +auto inline ICON_FA_EXCLAMATION_TRIANGLE = "\xef\x81\xb1"; +auto inline ICON_FA_PLANE = "\xef\x81\xb2"; +auto inline ICON_FA_CALENDAR = "\xef\x81\xb3"; +auto inline ICON_FA_RANDOM = "\xef\x81\xb4"; +auto inline ICON_FA_COMMENT = "\xef\x81\xb5"; +auto inline ICON_FA_MAGNET = "\xef\x81\xb6"; +auto inline ICON_FA_CHEVRON_UP = "\xef\x81\xb7"; +auto inline ICON_FA_CHEVRON_DOWN = "\xef\x81\xb8"; +auto inline ICON_FA_RETWEET = "\xef\x81\xb9"; +auto inline ICON_FA_SHOPPING_CART = "\xef\x81\xba"; +auto inline ICON_FA_FOLDER = "\xef\x81\xbb"; +auto inline ICON_FA_FOLDER_OPEN = "\xef\x81\xbc"; +auto inline ICON_FA_ARROWS_V = "\xef\x81\xbd"; +auto inline ICON_FA_ARROWS_H = "\xef\x81\xbe"; +auto inline ICON_FA_BAR_CHART = "\xef\x82\x80"; +auto inline ICON_FA_TWITTER_SQUARE = "\xef\x82\x81"; +auto inline ICON_FA_FACEBOOK_SQUARE = "\xef\x82\x82"; +auto inline ICON_FA_CAMERA_RETRO = "\xef\x82\x83"; +auto inline ICON_FA_KEY = "\xef\x82\x84"; +auto inline ICON_FA_COGS = "\xef\x82\x85"; +auto inline ICON_FA_COMMENTS = "\xef\x82\x86"; +auto inline ICON_FA_THUMBS_O_UP = "\xef\x82\x87"; +auto inline ICON_FA_THUMBS_O_DOWN = "\xef\x82\x88"; +auto inline ICON_FA_STAR_HALF = "\xef\x82\x89"; +auto inline ICON_FA_HEART_O = "\xef\x82\x8a"; +auto inline ICON_FA_SIGN_OUT = "\xef\x82\x8b"; +auto inline ICON_FA_LINKEDIN_SQUARE = "\xef\x82\x8c"; +auto inline ICON_FA_THUMB_TACK = "\xef\x82\x8d"; +auto inline ICON_FA_EXTERNAL_LINK = "\xef\x82\x8e"; +auto inline ICON_FA_SIGN_IN = "\xef\x82\x90"; +auto inline ICON_FA_TROPHY = "\xef\x82\x91"; +auto inline ICON_FA_GITHUB_SQUARE = "\xef\x82\x92"; +auto inline ICON_FA_UPLOAD = "\xef\x82\x93"; +auto inline ICON_FA_LEMON_O = "\xef\x82\x94"; +auto inline ICON_FA_PHONE = "\xef\x82\x95"; +auto inline ICON_FA_SQUARE_O = "\xef\x82\x96"; +auto inline ICON_FA_BOOKMARK_O = "\xef\x82\x97"; +auto inline ICON_FA_PHONE_SQUARE = "\xef\x82\x98"; +auto inline ICON_FA_TWITTER = "\xef\x82\x99"; +auto inline ICON_FA_FACEBOOK = "\xef\x82\x9a"; +auto inline ICON_FA_GITHUB = "\xef\x82\x9b"; +auto inline ICON_FA_UNLOCK = "\xef\x82\x9c"; +auto inline ICON_FA_CREDIT_CARD = "\xef\x82\x9d"; +auto inline ICON_FA_RSS = "\xef\x82\x9e"; +auto inline ICON_FA_HDD_O = "\xef\x82\xa0"; +auto inline ICON_FA_BULLHORN = "\xef\x82\xa1"; +auto inline ICON_FA_BELL = "\xef\x83\xb3"; +auto inline ICON_FA_CERTIFICATE = "\xef\x82\xa3"; +auto inline ICON_FA_HAND_O_RIGHT = "\xef\x82\xa4"; +auto inline ICON_FA_HAND_O_LEFT = "\xef\x82\xa5"; +auto inline ICON_FA_HAND_O_UP = "\xef\x82\xa6"; +auto inline ICON_FA_HAND_O_DOWN = "\xef\x82\xa7"; +auto inline ICON_FA_ARROW_CIRCLE_LEFT = "\xef\x82\xa8"; +auto inline ICON_FA_ARROW_CIRCLE_RIGHT = "\xef\x82\xa9"; +auto inline ICON_FA_ARROW_CIRCLE_UP = "\xef\x82\xaa"; +auto inline ICON_FA_ARROW_CIRCLE_DOWN = "\xef\x82\xab"; +auto inline ICON_FA_GLOBE = "\xef\x82\xac"; +auto inline ICON_FA_WRENCH = "\xef\x82\xad"; +auto inline ICON_FA_TASKS = "\xef\x82\xae"; +auto inline ICON_FA_FILTER = "\xef\x82\xb0"; +auto inline ICON_FA_BRIEFCASE = "\xef\x82\xb1"; +auto inline ICON_FA_ARROWS_ALT = "\xef\x82\xb2"; +auto inline ICON_FA_USERS = "\xef\x83\x80"; +auto inline ICON_FA_LINK = "\xef\x83\x81"; +auto inline ICON_FA_CLOUD = "\xef\x83\x82"; +auto inline ICON_FA_FLASK = "\xef\x83\x83"; +auto inline ICON_FA_SCISSORS = "\xef\x83\x84"; +auto inline ICON_FA_FILES_O = "\xef\x83\x85"; +auto inline ICON_FA_PAPERCLIP = "\xef\x83\x86"; +auto inline ICON_FA_FLOPPY_O = "\xef\x83\x87"; +auto inline ICON_FA_SQUARE = "\xef\x83\x88"; +auto inline ICON_FA_BARS = "\xef\x83\x89"; +auto inline ICON_FA_LIST_UL = "\xef\x83\x8a"; +auto inline ICON_FA_LIST_OL = "\xef\x83\x8b"; +auto inline ICON_FA_STRIKETHROUGH = "\xef\x83\x8c"; +auto inline ICON_FA_UNDERLINE = "\xef\x83\x8d"; +auto inline ICON_FA_TABLE = "\xef\x83\x8e"; +auto inline ICON_FA_MAGIC = "\xef\x83\x90"; +auto inline ICON_FA_TRUCK = "\xef\x83\x91"; +auto inline ICON_FA_PINTEREST = "\xef\x83\x92"; +auto inline ICON_FA_PINTEREST_SQUARE = "\xef\x83\x93"; +auto inline ICON_FA_GOOGLE_PLUS_SQUARE = "\xef\x83\x94"; +auto inline ICON_FA_GOOGLE_PLUS = "\xef\x83\x95"; +auto inline ICON_FA_MONEY = "\xef\x83\x96"; +auto inline ICON_FA_CARET_DOWN = "\xef\x83\x97"; +auto inline ICON_FA_CARET_UP = "\xef\x83\x98"; +auto inline ICON_FA_CARET_LEFT = "\xef\x83\x99"; +auto inline ICON_FA_CARET_RIGHT = "\xef\x83\x9a"; +auto inline ICON_FA_COLUMNS = "\xef\x83\x9b"; +auto inline ICON_FA_SORT = "\xef\x83\x9c"; +auto inline ICON_FA_SORT_DESC = "\xef\x83\x9d"; +auto inline ICON_FA_SORT_ASC = "\xef\x83\x9e"; +auto inline ICON_FA_ENVELOPE = "\xef\x83\xa0"; +auto inline ICON_FA_LINKEDIN = "\xef\x83\xa1"; +auto inline ICON_FA_UNDO = "\xef\x83\xa2"; +auto inline ICON_FA_GAVEL = "\xef\x83\xa3"; +auto inline ICON_FA_TACHOMETER = "\xef\x83\xa4"; +auto inline ICON_FA_COMMENT_O = "\xef\x83\xa5"; +auto inline ICON_FA_COMMENTS_O = "\xef\x83\xa6"; +auto inline ICON_FA_BOLT = "\xef\x83\xa7"; +auto inline ICON_FA_SITEMAP = "\xef\x83\xa8"; +auto inline ICON_FA_UMBRELLA = "\xef\x83\xa9"; +auto inline ICON_FA_CLIPBOARD = "\xef\x83\xaa"; +auto inline ICON_FA_LIGHTBULB_O = "\xef\x83\xab"; +auto inline ICON_FA_EXCHANGE = "\xef\x83\xac"; +auto inline ICON_FA_CLOUD_DOWNLOAD = "\xef\x83\xad"; +auto inline ICON_FA_CLOUD_UPLOAD = "\xef\x83\xae"; +auto inline ICON_FA_USER_MD = "\xef\x83\xb0"; +auto inline ICON_FA_STETHOSCOPE = "\xef\x83\xb1"; +auto inline ICON_FA_SUITCASE = "\xef\x83\xb2"; +auto inline ICON_FA_BELL_O = "\xef\x82\xa2"; +auto inline ICON_FA_COFFEE = "\xef\x83\xb4"; +auto inline ICON_FA_CUTLERY = "\xef\x83\xb5"; +auto inline ICON_FA_FILE_TEXT_O = "\xef\x83\xb6"; +auto inline ICON_FA_BUILDING_O = "\xef\x83\xb7"; +auto inline ICON_FA_HOSPITAL_O = "\xef\x83\xb8"; +auto inline ICON_FA_AMBULANCE = "\xef\x83\xb9"; +auto inline ICON_FA_MEDKIT = "\xef\x83\xba"; +auto inline ICON_FA_FIGHTER_JET = "\xef\x83\xbb"; +auto inline ICON_FA_BEER = "\xef\x83\xbc"; +auto inline ICON_FA_H_SQUARE = "\xef\x83\xbd"; +auto inline ICON_FA_PLUS_SQUARE = "\xef\x83\xbe"; +auto inline ICON_FA_ANGLE_DOUBLE_LEFT = "\xef\x84\x80"; +auto inline ICON_FA_ANGLE_DOUBLE_RIGHT = "\xef\x84\x81"; +auto inline ICON_FA_ANGLE_DOUBLE_UP = "\xef\x84\x82"; +auto inline ICON_FA_ANGLE_DOUBLE_DOWN = "\xef\x84\x83"; +auto inline ICON_FA_ANGLE_LEFT = "\xef\x84\x84"; +auto inline ICON_FA_ANGLE_RIGHT = "\xef\x84\x85"; +auto inline ICON_FA_ANGLE_UP = "\xef\x84\x86"; +auto inline ICON_FA_ANGLE_DOWN = "\xef\x84\x87"; +auto inline ICON_FA_DESKTOP = "\xef\x84\x88"; +auto inline ICON_FA_LAPTOP = "\xef\x84\x89"; +auto inline ICON_FA_TABLET = "\xef\x84\x8a"; +auto inline ICON_FA_MOBILE = "\xef\x84\x8b"; +auto inline ICON_FA_CIRCLE_O = "\xef\x84\x8c"; +auto inline ICON_FA_QUOTE_LEFT = "\xef\x84\x8d"; +auto inline ICON_FA_QUOTE_RIGHT = "\xef\x84\x8e"; +auto inline ICON_FA_SPINNER = "\xef\x84\x90"; +auto inline ICON_FA_CIRCLE = "\xef\x84\x91"; +auto inline ICON_FA_REPLY = "\xef\x84\x92"; +auto inline ICON_FA_GITHUB_ALT = "\xef\x84\x93"; +auto inline ICON_FA_FOLDER_O = "\xef\x84\x94"; +auto inline ICON_FA_FOLDER_OPEN_O = "\xef\x84\x95"; +auto inline ICON_FA_SMILE_O = "\xef\x84\x98"; +auto inline ICON_FA_FROWN_O = "\xef\x84\x99"; +auto inline ICON_FA_MEH_O = "\xef\x84\x9a"; +auto inline ICON_FA_GAMEPAD = "\xef\x84\x9b"; +auto inline ICON_FA_KEYBOARD_O = "\xef\x84\x9c"; +auto inline ICON_FA_FLAG_O = "\xef\x84\x9d"; +auto inline ICON_FA_FLAG_CHECKERED = "\xef\x84\x9e"; +auto inline ICON_FA_TERMINAL = "\xef\x84\xa0"; +auto inline ICON_FA_CODE = "\xef\x84\xa1"; +auto inline ICON_FA_REPLY_ALL = "\xef\x84\xa2"; +auto inline ICON_FA_STAR_HALF_O = "\xef\x84\xa3"; +auto inline ICON_FA_LOCATION_ARROW = "\xef\x84\xa4"; +auto inline ICON_FA_CROP = "\xef\x84\xa5"; +auto inline ICON_FA_CODE_FORK = "\xef\x84\xa6"; +auto inline ICON_FA_CHAIN_BROKEN = "\xef\x84\xa7"; +auto inline ICON_FA_QUESTION = "\xef\x84\xa8"; +auto inline ICON_FA_INFO = "\xef\x84\xa9"; +auto inline ICON_FA_EXCLAMATION = "\xef\x84\xaa"; +auto inline ICON_FA_SUPERSCRIPT = "\xef\x84\xab"; +auto inline ICON_FA_SUBSCRIPT = "\xef\x84\xac"; +auto inline ICON_FA_ERASER = "\xef\x84\xad"; +auto inline ICON_FA_PUZZLE_PIECE = "\xef\x84\xae"; +auto inline ICON_FA_MICROPHONE = "\xef\x84\xb0"; +auto inline ICON_FA_MICROPHONE_SLASH = "\xef\x84\xb1"; +auto inline ICON_FA_SHIELD = "\xef\x84\xb2"; +auto inline ICON_FA_CALENDAR_O = "\xef\x84\xb3"; +auto inline ICON_FA_FIRE_EXTINGUISHER = "\xef\x84\xb4"; +auto inline ICON_FA_ROCKET = "\xef\x84\xb5"; +auto inline ICON_FA_MAXCDN = "\xef\x84\xb6"; +auto inline ICON_FA_CHEVRON_CIRCLE_LEFT = "\xef\x84\xb7"; +auto inline ICON_FA_CHEVRON_CIRCLE_RIGHT = "\xef\x84\xb8"; +auto inline ICON_FA_CHEVRON_CIRCLE_UP = "\xef\x84\xb9"; +auto inline ICON_FA_CHEVRON_CIRCLE_DOWN = "\xef\x84\xba"; +auto inline ICON_FA_HTML5 = "\xef\x84\xbb"; +auto inline ICON_FA_CSS3 = "\xef\x84\xbc"; +auto inline ICON_FA_ANCHOR = "\xef\x84\xbd"; +auto inline ICON_FA_UNLOCK_ALT = "\xef\x84\xbe"; +auto inline ICON_FA_BULLSEYE = "\xef\x85\x80"; +auto inline ICON_FA_ELLIPSIS_H = "\xef\x85\x81"; +auto inline ICON_FA_ELLIPSIS_V = "\xef\x85\x82"; +auto inline ICON_FA_RSS_SQUARE = "\xef\x85\x83"; +auto inline ICON_FA_PLAY_CIRCLE = "\xef\x85\x84"; +auto inline ICON_FA_TICKET = "\xef\x85\x85"; +auto inline ICON_FA_MINUS_SQUARE = "\xef\x85\x86"; +auto inline ICON_FA_MINUS_SQUARE_O = "\xef\x85\x87"; +auto inline ICON_FA_LEVEL_UP = "\xef\x85\x88"; +auto inline ICON_FA_LEVEL_DOWN = "\xef\x85\x89"; +auto inline ICON_FA_CHECK_SQUARE = "\xef\x85\x8a"; +auto inline ICON_FA_PENCIL_SQUARE = "\xef\x85\x8b"; +auto inline ICON_FA_EXTERNAL_LINK_SQUARE = "\xef\x85\x8c"; +auto inline ICON_FA_SHARE_SQUARE = "\xef\x85\x8d"; +auto inline ICON_FA_COMPASS = "\xef\x85\x8e"; +auto inline ICON_FA_CARET_SQUARE_O_DOWN = "\xef\x85\x90"; +auto inline ICON_FA_CARET_SQUARE_O_UP = "\xef\x85\x91"; +auto inline ICON_FA_CARET_SQUARE_O_RIGHT = "\xef\x85\x92"; +auto inline ICON_FA_EUR = "\xef\x85\x93"; +auto inline ICON_FA_GBP = "\xef\x85\x94"; +auto inline ICON_FA_USD = "\xef\x85\x95"; +auto inline ICON_FA_INR = "\xef\x85\x96"; +auto inline ICON_FA_JPY = "\xef\x85\x97"; +auto inline ICON_FA_RUB = "\xef\x85\x98"; +auto inline ICON_FA_KRW = "\xef\x85\x99"; +auto inline ICON_FA_BTC = "\xef\x85\x9a"; +auto inline ICON_FA_FILE = "\xef\x85\x9b"; +auto inline ICON_FA_FILE_TEXT = "\xef\x85\x9c"; +auto inline ICON_FA_SORT_ALPHA_ASC = "\xef\x85\x9d"; +auto inline ICON_FA_SORT_ALPHA_DESC = "\xef\x85\x9e"; +auto inline ICON_FA_SORT_AMOUNT_ASC = "\xef\x85\xa0"; +auto inline ICON_FA_SORT_AMOUNT_DESC = "\xef\x85\xa1"; +auto inline ICON_FA_SORT_NUMERIC_ASC = "\xef\x85\xa2"; +auto inline ICON_FA_SORT_NUMERIC_DESC = "\xef\x85\xa3"; +auto inline ICON_FA_THUMBS_UP = "\xef\x85\xa4"; +auto inline ICON_FA_THUMBS_DOWN = "\xef\x85\xa5"; +auto inline ICON_FA_YOUTUBE_SQUARE = "\xef\x85\xa6"; +auto inline ICON_FA_YOUTUBE = "\xef\x85\xa7"; +auto inline ICON_FA_XING = "\xef\x85\xa8"; +auto inline ICON_FA_XING_SQUARE = "\xef\x85\xa9"; +auto inline ICON_FA_YOUTUBE_PLAY = "\xef\x85\xaa"; +auto inline ICON_FA_DROPBOX = "\xef\x85\xab"; +auto inline ICON_FA_STACK_OVERFLOW = "\xef\x85\xac"; +auto inline ICON_FA_INSTAGRAM = "\xef\x85\xad"; +auto inline ICON_FA_FLICKR = "\xef\x85\xae"; +auto inline ICON_FA_ADN = "\xef\x85\xb0"; +auto inline ICON_FA_BITBUCKET = "\xef\x85\xb1"; +auto inline ICON_FA_BITBUCKET_SQUARE = "\xef\x85\xb2"; +auto inline ICON_FA_TUMBLR = "\xef\x85\xb3"; +auto inline ICON_FA_TUMBLR_SQUARE = "\xef\x85\xb4"; +auto inline ICON_FA_LONG_ARROW_DOWN = "\xef\x85\xb5"; +auto inline ICON_FA_LONG_ARROW_UP = "\xef\x85\xb6"; +auto inline ICON_FA_LONG_ARROW_LEFT = "\xef\x85\xb7"; +auto inline ICON_FA_LONG_ARROW_RIGHT = "\xef\x85\xb8"; +auto inline ICON_FA_APPLE = "\xef\x85\xb9"; +auto inline ICON_FA_WINDOWS = "\xef\x85\xba"; +auto inline ICON_FA_ANDROID = "\xef\x85\xbb"; +auto inline ICON_FA_LINUX = "\xef\x85\xbc"; +auto inline ICON_FA_DRIBBBLE = "\xef\x85\xbd"; +auto inline ICON_FA_SKYPE = "\xef\x85\xbe"; +auto inline ICON_FA_FOURSQUARE = "\xef\x86\x80"; +auto inline ICON_FA_TRELLO = "\xef\x86\x81"; +auto inline ICON_FA_FEMALE = "\xef\x86\x82"; +auto inline ICON_FA_MALE = "\xef\x86\x83"; +auto inline ICON_FA_GRATIPAY = "\xef\x86\x84"; +auto inline ICON_FA_SUN_O = "\xef\x86\x85"; +auto inline ICON_FA_MOON_O = "\xef\x86\x86"; +auto inline ICON_FA_ARCHIVE = "\xef\x86\x87"; +auto inline ICON_FA_BUG = "\xef\x86\x88"; +auto inline ICON_FA_VK = "\xef\x86\x89"; +auto inline ICON_FA_WEIBO = "\xef\x86\x8a"; +auto inline ICON_FA_RENREN = "\xef\x86\x8b"; +auto inline ICON_FA_PAGELINES = "\xef\x86\x8c"; +auto inline ICON_FA_STACK_EXCHANGE = "\xef\x86\x8d"; +auto inline ICON_FA_ARROW_CIRCLE_O_RIGHT = "\xef\x86\x8e"; +auto inline ICON_FA_ARROW_CIRCLE_O_LEFT = "\xef\x86\x90"; +auto inline ICON_FA_CARET_SQUARE_O_LEFT = "\xef\x86\x91"; +auto inline ICON_FA_DOT_CIRCLE_O = "\xef\x86\x92"; +auto inline ICON_FA_WHEELCHAIR = "\xef\x86\x93"; +auto inline ICON_FA_VIMEO_SQUARE = "\xef\x86\x94"; +auto inline ICON_FA_TRY = "\xef\x86\x95"; +auto inline ICON_FA_PLUS_SQUARE_O = "\xef\x86\x96"; +auto inline ICON_FA_SPACE_SHUTTLE = "\xef\x86\x97"; +auto inline ICON_FA_SLACK = "\xef\x86\x98"; +auto inline ICON_FA_ENVELOPE_SQUARE = "\xef\x86\x99"; +auto inline ICON_FA_WORDPRESS = "\xef\x86\x9a"; +auto inline ICON_FA_OPENID = "\xef\x86\x9b"; +auto inline ICON_FA_UNIVERSITY = "\xef\x86\x9c"; +auto inline ICON_FA_GRADUATION_CAP = "\xef\x86\x9d"; +auto inline ICON_FA_YAHOO = "\xef\x86\x9e"; +auto inline ICON_FA_GOOGLE = "\xef\x86\xa0"; +auto inline ICON_FA_REDDIT = "\xef\x86\xa1"; +auto inline ICON_FA_REDDIT_SQUARE = "\xef\x86\xa2"; +auto inline ICON_FA_STUMBLEUPON_CIRCLE = "\xef\x86\xa3"; +auto inline ICON_FA_STUMBLEUPON = "\xef\x86\xa4"; +auto inline ICON_FA_DELICIOUS = "\xef\x86\xa5"; +auto inline ICON_FA_DIGG = "\xef\x86\xa6"; +auto inline ICON_FA_PIED_PIPER_PP = "\xef\x86\xa7"; +auto inline ICON_FA_PIED_PIPER_ALT = "\xef\x86\xa8"; +auto inline ICON_FA_DRUPAL = "\xef\x86\xa9"; +auto inline ICON_FA_JOOMLA = "\xef\x86\xaa"; +auto inline ICON_FA_LANGUAGE = "\xef\x86\xab"; +auto inline ICON_FA_FAX = "\xef\x86\xac"; +auto inline ICON_FA_BUILDING = "\xef\x86\xad"; +auto inline ICON_FA_CHILD = "\xef\x86\xae"; +auto inline ICON_FA_PAW = "\xef\x86\xb0"; +auto inline ICON_FA_SPOON = "\xef\x86\xb1"; +auto inline ICON_FA_CUBE = "\xef\x86\xb2"; +auto inline ICON_FA_CUBES = "\xef\x86\xb3"; +auto inline ICON_FA_BEHANCE = "\xef\x86\xb4"; +auto inline ICON_FA_BEHANCE_SQUARE = "\xef\x86\xb5"; +auto inline ICON_FA_STEAM = "\xef\x86\xb6"; +auto inline ICON_FA_STEAM_SQUARE = "\xef\x86\xb7"; +auto inline ICON_FA_RECYCLE = "\xef\x86\xb8"; +auto inline ICON_FA_CAR = "\xef\x86\xb9"; +auto inline ICON_FA_TAXI = "\xef\x86\xba"; +auto inline ICON_FA_TREE = "\xef\x86\xbb"; +auto inline ICON_FA_SPOTIFY = "\xef\x86\xbc"; +auto inline ICON_FA_DEVIANTART = "\xef\x86\xbd"; +auto inline ICON_FA_SOUNDCLOUD = "\xef\x86\xbe"; +auto inline ICON_FA_DATABASE = "\xef\x87\x80"; +auto inline ICON_FA_FILE_PDF_O = "\xef\x87\x81"; +auto inline ICON_FA_FILE_WORD_O = "\xef\x87\x82"; +auto inline ICON_FA_FILE_EXCEL_O = "\xef\x87\x83"; +auto inline ICON_FA_FILE_POWERPOINT_O = "\xef\x87\x84"; +auto inline ICON_FA_FILE_IMAGE_O = "\xef\x87\x85"; +auto inline ICON_FA_FILE_ARCHIVE_O = "\xef\x87\x86"; +auto inline ICON_FA_FILE_AUDIO_O = "\xef\x87\x87"; +auto inline ICON_FA_FILE_VIDEO_O = "\xef\x87\x88"; +auto inline ICON_FA_FILE_CODE_O = "\xef\x87\x89"; +auto inline ICON_FA_VINE = "\xef\x87\x8a"; +auto inline ICON_FA_CODEPEN = "\xef\x87\x8b"; +auto inline ICON_FA_JSFIDDLE = "\xef\x87\x8c"; +auto inline ICON_FA_LIFE_RING = "\xef\x87\x8d"; +auto inline ICON_FA_CIRCLE_O_NOTCH = "\xef\x87\x8e"; +auto inline ICON_FA_REBEL = "\xef\x87\x90"; +auto inline ICON_FA_EMPIRE = "\xef\x87\x91"; +auto inline ICON_FA_GIT_SQUARE = "\xef\x87\x92"; +auto inline ICON_FA_GIT = "\xef\x87\x93"; +auto inline ICON_FA_HACKER_NEWS = "\xef\x87\x94"; +auto inline ICON_FA_TENCENT_WEIBO = "\xef\x87\x95"; +auto inline ICON_FA_QQ = "\xef\x87\x96"; +auto inline ICON_FA_WEIXIN = "\xef\x87\x97"; +auto inline ICON_FA_PAPER_PLANE = "\xef\x87\x98"; +auto inline ICON_FA_PAPER_PLANE_O = "\xef\x87\x99"; +auto inline ICON_FA_HISTORY = "\xef\x87\x9a"; +auto inline ICON_FA_CIRCLE_THIN = "\xef\x87\x9b"; +auto inline ICON_FA_HEADER = "\xef\x87\x9c"; +auto inline ICON_FA_PARAGRAPH = "\xef\x87\x9d"; +auto inline ICON_FA_SLIDERS = "\xef\x87\x9e"; +auto inline ICON_FA_SHARE_ALT = "\xef\x87\xa0"; +auto inline ICON_FA_SHARE_ALT_SQUARE = "\xef\x87\xa1"; +auto inline ICON_FA_BOMB = "\xef\x87\xa2"; +auto inline ICON_FA_FUTBOL_O = "\xef\x87\xa3"; +auto inline ICON_FA_TTY = "\xef\x87\xa4"; +auto inline ICON_FA_BINOCULARS = "\xef\x87\xa5"; +auto inline ICON_FA_PLUG = "\xef\x87\xa6"; +auto inline ICON_FA_SLIDESHARE = "\xef\x87\xa7"; +auto inline ICON_FA_TWITCH = "\xef\x87\xa8"; +auto inline ICON_FA_YELP = "\xef\x87\xa9"; +auto inline ICON_FA_NEWSPAPER_O = "\xef\x87\xaa"; +auto inline ICON_FA_WIFI = "\xef\x87\xab"; +auto inline ICON_FA_CALCULATOR = "\xef\x87\xac"; +auto inline ICON_FA_PAYPAL = "\xef\x87\xad"; +auto inline ICON_FA_GOOGLE_WALLET = "\xef\x87\xae"; +auto inline ICON_FA_CC_VISA = "\xef\x87\xb0"; +auto inline ICON_FA_CC_MASTERCARD = "\xef\x87\xb1"; +auto inline ICON_FA_CC_DISCOVER = "\xef\x87\xb2"; +auto inline ICON_FA_CC_AMEX = "\xef\x87\xb3"; +auto inline ICON_FA_CC_PAYPAL = "\xef\x87\xb4"; +auto inline ICON_FA_CC_STRIPE = "\xef\x87\xb5"; +auto inline ICON_FA_BELL_SLASH = "\xef\x87\xb6"; +auto inline ICON_FA_BELL_SLASH_O = "\xef\x87\xb7"; +auto inline ICON_FA_TRASH = "\xef\x87\xb8"; +auto inline ICON_FA_COPYRIGHT = "\xef\x87\xb9"; +auto inline ICON_FA_AT = "\xef\x87\xba"; +auto inline ICON_FA_EYEDROPPER = "\xef\x87\xbb"; +auto inline ICON_FA_PAINT_BRUSH = "\xef\x87\xbc"; +auto inline ICON_FA_BIRTHDAY_CAKE = "\xef\x87\xbd"; +auto inline ICON_FA_AREA_CHART = "\xef\x87\xbe"; +auto inline ICON_FA_PIE_CHART = "\xef\x88\x80"; +auto inline ICON_FA_LINE_CHART = "\xef\x88\x81"; +auto inline ICON_FA_LASTFM = "\xef\x88\x82"; +auto inline ICON_FA_LASTFM_SQUARE = "\xef\x88\x83"; +auto inline ICON_FA_TOGGLE_OFF = "\xef\x88\x84"; +auto inline ICON_FA_TOGGLE_ON = "\xef\x88\x85"; +auto inline ICON_FA_BICYCLE = "\xef\x88\x86"; +auto inline ICON_FA_BUS = "\xef\x88\x87"; +auto inline ICON_FA_IOXHOST = "\xef\x88\x88"; +auto inline ICON_FA_ANGELLIST = "\xef\x88\x89"; +auto inline ICON_FA_CC = "\xef\x88\x8a"; +auto inline ICON_FA_ILS = "\xef\x88\x8b"; +auto inline ICON_FA_MEANPATH = "\xef\x88\x8c"; +auto inline ICON_FA_BUYSELLADS = "\xef\x88\x8d"; +auto inline ICON_FA_CONNECTDEVELOP = "\xef\x88\x8e"; +auto inline ICON_FA_DASHCUBE = "\xef\x88\x90"; +auto inline ICON_FA_FORUMBEE = "\xef\x88\x91"; +auto inline ICON_FA_LEANPUB = "\xef\x88\x92"; +auto inline ICON_FA_SELLSY = "\xef\x88\x93"; +auto inline ICON_FA_SHIRTSINBULK = "\xef\x88\x94"; +auto inline ICON_FA_SIMPLYBUILT = "\xef\x88\x95"; +auto inline ICON_FA_SKYATLAS = "\xef\x88\x96"; +auto inline ICON_FA_CART_PLUS = "\xef\x88\x97"; +auto inline ICON_FA_CART_ARROW_DOWN = "\xef\x88\x98"; +auto inline ICON_FA_DIAMOND = "\xef\x88\x99"; +auto inline ICON_FA_SHIP = "\xef\x88\x9a"; +auto inline ICON_FA_USER_SECRET = "\xef\x88\x9b"; +auto inline ICON_FA_MOTORCYCLE = "\xef\x88\x9c"; +auto inline ICON_FA_STREET_VIEW = "\xef\x88\x9d"; +auto inline ICON_FA_HEARTBEAT = "\xef\x88\x9e"; +auto inline ICON_FA_VENUS = "\xef\x88\xa1"; +auto inline ICON_FA_MARS = "\xef\x88\xa2"; +auto inline ICON_FA_MERCURY = "\xef\x88\xa3"; +auto inline ICON_FA_TRANSGENDER = "\xef\x88\xa4"; +auto inline ICON_FA_TRANSGENDER_ALT = "\xef\x88\xa5"; +auto inline ICON_FA_VENUS_DOUBLE = "\xef\x88\xa6"; +auto inline ICON_FA_MARS_DOUBLE = "\xef\x88\xa7"; +auto inline ICON_FA_VENUS_MARS = "\xef\x88\xa8"; +auto inline ICON_FA_MARS_STROKE = "\xef\x88\xa9"; +auto inline ICON_FA_MARS_STROKE_V = "\xef\x88\xaa"; +auto inline ICON_FA_MARS_STROKE_H = "\xef\x88\xab"; +auto inline ICON_FA_NEUTER = "\xef\x88\xac"; +auto inline ICON_FA_GENDERLESS = "\xef\x88\xad"; +auto inline ICON_FA_FACEBOOK_OFFICIAL = "\xef\x88\xb0"; +auto inline ICON_FA_PINTEREST_P = "\xef\x88\xb1"; +auto inline ICON_FA_WHATSAPP = "\xef\x88\xb2"; +auto inline ICON_FA_SERVER = "\xef\x88\xb3"; +auto inline ICON_FA_USER_PLUS = "\xef\x88\xb4"; +auto inline ICON_FA_USER_TIMES = "\xef\x88\xb5"; +auto inline ICON_FA_BED = "\xef\x88\xb6"; +auto inline ICON_FA_VIACOIN = "\xef\x88\xb7"; +auto inline ICON_FA_TRAIN = "\xef\x88\xb8"; +auto inline ICON_FA_SUBWAY = "\xef\x88\xb9"; +auto inline ICON_FA_MEDIUM = "\xef\x88\xba"; +auto inline ICON_FA_Y_COMBINATOR = "\xef\x88\xbb"; +auto inline ICON_FA_OPTIN_MONSTER = "\xef\x88\xbc"; +auto inline ICON_FA_OPENCART = "\xef\x88\xbd"; +auto inline ICON_FA_EXPEDITEDSSL = "\xef\x88\xbe"; +auto inline ICON_FA_BATTERY_FULL = "\xef\x89\x80"; +auto inline ICON_FA_BATTERY_THREE_QUARTERS = "\xef\x89\x81"; +auto inline ICON_FA_BATTERY_HALF = "\xef\x89\x82"; +auto inline ICON_FA_BATTERY_QUARTER = "\xef\x89\x83"; +auto inline ICON_FA_BATTERY_EMPTY = "\xef\x89\x84"; +auto inline ICON_FA_MOUSE_POINTER = "\xef\x89\x85"; +auto inline ICON_FA_I_CURSOR = "\xef\x89\x86"; +auto inline ICON_FA_OBJECT_GROUP = "\xef\x89\x87"; +auto inline ICON_FA_OBJECT_UNGROUP = "\xef\x89\x88"; +auto inline ICON_FA_STICKY_NOTE = "\xef\x89\x89"; +auto inline ICON_FA_STICKY_NOTE_O = "\xef\x89\x8a"; +auto inline ICON_FA_CC_JCB = "\xef\x89\x8b"; +auto inline ICON_FA_CC_DINERS_CLUB = "\xef\x89\x8c"; +auto inline ICON_FA_CLONE = "\xef\x89\x8d"; +auto inline ICON_FA_BALANCE_SCALE = "\xef\x89\x8e"; +auto inline ICON_FA_HOURGLASS_O = "\xef\x89\x90"; +auto inline ICON_FA_HOURGLASS_START = "\xef\x89\x91"; +auto inline ICON_FA_HOURGLASS_HALF = "\xef\x89\x92"; +auto inline ICON_FA_HOURGLASS_END = "\xef\x89\x93"; +auto inline ICON_FA_HOURGLASS = "\xef\x89\x94"; +auto inline ICON_FA_HAND_ROCK_O = "\xef\x89\x95"; +auto inline ICON_FA_HAND_PAPER_O = "\xef\x89\x96"; +auto inline ICON_FA_HAND_SCISSORS_O = "\xef\x89\x97"; +auto inline ICON_FA_HAND_LIZARD_O = "\xef\x89\x98"; +auto inline ICON_FA_HAND_SPOCK_O = "\xef\x89\x99"; +auto inline ICON_FA_HAND_POINTER_O = "\xef\x89\x9a"; +auto inline ICON_FA_HAND_PEACE_O = "\xef\x89\x9b"; +auto inline ICON_FA_TRADEMARK = "\xef\x89\x9c"; +auto inline ICON_FA_REGISTERED = "\xef\x89\x9d"; +auto inline ICON_FA_CREATIVE_COMMONS = "\xef\x89\x9e"; +auto inline ICON_FA_GG = "\xef\x89\xa0"; +auto inline ICON_FA_GG_CIRCLE = "\xef\x89\xa1"; +auto inline ICON_FA_TRIPADVISOR = "\xef\x89\xa2"; +auto inline ICON_FA_ODNOKLASSNIKI = "\xef\x89\xa3"; +auto inline ICON_FA_ODNOKLASSNIKI_SQUARE = "\xef\x89\xa4"; +auto inline ICON_FA_GET_POCKET = "\xef\x89\xa5"; +auto inline ICON_FA_WIKIPEDIA_W = "\xef\x89\xa6"; +auto inline ICON_FA_SAFARI = "\xef\x89\xa7"; +auto inline ICON_FA_CHROME = "\xef\x89\xa8"; +auto inline ICON_FA_FIREFOX = "\xef\x89\xa9"; +auto inline ICON_FA_OPERA = "\xef\x89\xaa"; +auto inline ICON_FA_INTERNET_EXPLORER = "\xef\x89\xab"; +auto inline ICON_FA_TELEVISION = "\xef\x89\xac"; +auto inline ICON_FA_CONTAO = "\xef\x89\xad"; +auto inline ICON_FA_500PX = "\xef\x89\xae"; +auto inline ICON_FA_AMAZON = "\xef\x89\xb0"; +auto inline ICON_FA_CALENDAR_PLUS_O = "\xef\x89\xb1"; +auto inline ICON_FA_CALENDAR_MINUS_O = "\xef\x89\xb2"; +auto inline ICON_FA_CALENDAR_TIMES_O = "\xef\x89\xb3"; +auto inline ICON_FA_CALENDAR_CHECK_O = "\xef\x89\xb4"; +auto inline ICON_FA_INDUSTRY = "\xef\x89\xb5"; +auto inline ICON_FA_MAP_PIN = "\xef\x89\xb6"; +auto inline ICON_FA_MAP_SIGNS = "\xef\x89\xb7"; +auto inline ICON_FA_MAP_O = "\xef\x89\xb8"; +auto inline ICON_FA_MAP = "\xef\x89\xb9"; +auto inline ICON_FA_COMMENTING = "\xef\x89\xba"; +auto inline ICON_FA_COMMENTING_O = "\xef\x89\xbb"; +auto inline ICON_FA_HOUZZ = "\xef\x89\xbc"; +auto inline ICON_FA_VIMEO = "\xef\x89\xbd"; +auto inline ICON_FA_BLACK_TIE = "\xef\x89\xbe"; +auto inline ICON_FA_FONTICONS = "\xef\x8a\x80"; +auto inline ICON_FA_REDDIT_ALIEN = "\xef\x8a\x81"; +auto inline ICON_FA_EDGE = "\xef\x8a\x82"; +auto inline ICON_FA_CREDIT_CARD_ALT = "\xef\x8a\x83"; +auto inline ICON_FA_CODIEPIE = "\xef\x8a\x84"; +auto inline ICON_FA_MODX = "\xef\x8a\x85"; +auto inline ICON_FA_FORT_AWESOME = "\xef\x8a\x86"; +auto inline ICON_FA_USB = "\xef\x8a\x87"; +auto inline ICON_FA_PRODUCT_HUNT = "\xef\x8a\x88"; +auto inline ICON_FA_MIXCLOUD = "\xef\x8a\x89"; +auto inline ICON_FA_SCRIBD = "\xef\x8a\x8a"; +auto inline ICON_FA_PAUSE_CIRCLE = "\xef\x8a\x8b"; +auto inline ICON_FA_PAUSE_CIRCLE_O = "\xef\x8a\x8c"; +auto inline ICON_FA_STOP_CIRCLE = "\xef\x8a\x8d"; +auto inline ICON_FA_STOP_CIRCLE_O = "\xef\x8a\x8e"; +auto inline ICON_FA_SHOPPING_BAG = "\xef\x8a\x90"; +auto inline ICON_FA_SHOPPING_BASKET = "\xef\x8a\x91"; +auto inline ICON_FA_HASHTAG = "\xef\x8a\x92"; +auto inline ICON_FA_BLUETOOTH = "\xef\x8a\x93"; +auto inline ICON_FA_BLUETOOTH_B = "\xef\x8a\x94"; +auto inline ICON_FA_PERCENT = "\xef\x8a\x95"; +auto inline ICON_FA_GITLAB = "\xef\x8a\x96"; +auto inline ICON_FA_WPBEGINNER = "\xef\x8a\x97"; +auto inline ICON_FA_WPFORMS = "\xef\x8a\x98"; +auto inline ICON_FA_ENVIRA = "\xef\x8a\x99"; +auto inline ICON_FA_UNIVERSAL_ACCESS = "\xef\x8a\x9a"; +auto inline ICON_FA_WHEELCHAIR_ALT = "\xef\x8a\x9b"; +auto inline ICON_FA_QUESTION_CIRCLE_O = "\xef\x8a\x9c"; +auto inline ICON_FA_BLIND = "\xef\x8a\x9d"; +auto inline ICON_FA_AUDIO_DESCRIPTION = "\xef\x8a\x9e"; +auto inline ICON_FA_VOLUME_CONTROL_PHONE = "\xef\x8a\xa0"; +auto inline ICON_FA_BRAILLE = "\xef\x8a\xa1"; +auto inline ICON_FA_ASSISTIVE_LISTENING_SYSTEMS = "\xef\x8a\xa2"; +auto inline ICON_FA_AMERICAN_SIGN_LANGUAGE_INTERPRETING = "\xef\x8a\xa3"; +auto inline ICON_FA_DEAF = "\xef\x8a\xa4"; +auto inline ICON_FA_GLIDE = "\xef\x8a\xa5"; +auto inline ICON_FA_GLIDE_G = "\xef\x8a\xa6"; +auto inline ICON_FA_SIGN_LANGUAGE = "\xef\x8a\xa7"; +auto inline ICON_FA_LOW_VISION = "\xef\x8a\xa8"; +auto inline ICON_FA_VIADEO = "\xef\x8a\xa9"; +auto inline ICON_FA_VIADEO_SQUARE = "\xef\x8a\xaa"; +auto inline ICON_FA_SNAPCHAT = "\xef\x8a\xab"; +auto inline ICON_FA_SNAPCHAT_GHOST = "\xef\x8a\xac"; +auto inline ICON_FA_SNAPCHAT_SQUARE = "\xef\x8a\xad"; +auto inline ICON_FA_PIED_PIPER = "\xef\x8a\xae"; +auto inline ICON_FA_FIRST_ORDER = "\xef\x8a\xb0"; +auto inline ICON_FA_YOAST = "\xef\x8a\xb1"; +auto inline ICON_FA_THEMEISLE = "\xef\x8a\xb2"; +auto inline ICON_FA_GOOGLE_PLUS_OFFICIAL = "\xef\x8a\xb3"; +auto inline ICON_FA_FONT_AWESOME = "\xef\x8a\xb4"; +auto inline ICON_FA_HANDSHAKE_O = "\xef\x8a\xb5"; +auto inline ICON_FA_ENVELOPE_OPEN = "\xef\x8a\xb6"; +auto inline ICON_FA_ENVELOPE_OPEN_O = "\xef\x8a\xb7"; +auto inline ICON_FA_LINODE = "\xef\x8a\xb8"; +auto inline ICON_FA_ADDRESS_BOOK = "\xef\x8a\xb9"; +auto inline ICON_FA_ADDRESS_BOOK_O = "\xef\x8a\xba"; +auto inline ICON_FA_ADDRESS_CARD = "\xef\x8a\xbb"; +auto inline ICON_FA_ADDRESS_CARD_O = "\xef\x8a\xbc"; +auto inline ICON_FA_USER_CIRCLE = "\xef\x8a\xbd"; +auto inline ICON_FA_USER_CIRCLE_O = "\xef\x8a\xbe"; +auto inline ICON_FA_USER_O = "\xef\x8b\x80"; +auto inline ICON_FA_ID_BADGE = "\xef\x8b\x81"; +auto inline ICON_FA_ID_CARD = "\xef\x8b\x82"; +auto inline ICON_FA_ID_CARD_O = "\xef\x8b\x83"; +auto inline ICON_FA_QUORA = "\xef\x8b\x84"; +auto inline ICON_FA_FREE_CODE_CAMP = "\xef\x8b\x85"; +auto inline ICON_FA_TELEGRAM = "\xef\x8b\x86"; +auto inline ICON_FA_THERMOMETER_FULL = "\xef\x8b\x87"; +auto inline ICON_FA_THERMOMETER_THREE_QUARTERS = "\xef\x8b\x88"; +auto inline ICON_FA_THERMOMETER_HALF = "\xef\x8b\x89"; +auto inline ICON_FA_THERMOMETER_QUARTER = "\xef\x8b\x8a"; +auto inline ICON_FA_THERMOMETER_EMPTY = "\xef\x8b\x8b"; +auto inline ICON_FA_SHOWER = "\xef\x8b\x8c"; +auto inline ICON_FA_BATH = "\xef\x8b\x8d"; +auto inline ICON_FA_PODCAST = "\xef\x8b\x8e"; +auto inline ICON_FA_WINDOW_MAXIMIZE = "\xef\x8b\x90"; +auto inline ICON_FA_WINDOW_MINIMIZE = "\xef\x8b\x91"; +auto inline ICON_FA_WINDOW_RESTORE = "\xef\x8b\x92"; +auto inline ICON_FA_WINDOW_CLOSE = "\xef\x8b\x93"; +auto inline ICON_FA_WINDOW_CLOSE_O = "\xef\x8b\x94"; +auto inline ICON_FA_BANDCAMP = "\xef\x8b\x95"; +auto inline ICON_FA_GRAV = "\xef\x8b\x96"; +auto inline ICON_FA_ETSY = "\xef\x8b\x97"; +auto inline ICON_FA_IMDB = "\xef\x8b\x98"; +auto inline ICON_FA_RAVELRY = "\xef\x8b\x99"; +auto inline ICON_FA_EERCAST = "\xef\x8b\x9a"; +auto inline ICON_FA_MICROCHIP = "\xef\x8b\x9b"; +auto inline ICON_FA_SNOWFLAKE_O = "\xef\x8b\x9c"; +auto inline ICON_FA_SUPERPOWERS = "\xef\x8b\x9d"; +auto inline ICON_FA_WPEXPLORER = "\xef\x8b\x9e"; +auto inline ICON_FA_MEETUP = "\xef\x8b\xa0"; \ No newline at end of file From b3b188c32a514fd0561f4b3adc7777beb066403a Mon Sep 17 00:00:00 2001 From: dark-dylan-dev Date: Sun, 6 Jul 2025 13:43:42 +0200 Subject: [PATCH 3/3] GUI update, more convenient. --- .gitignore | 373 +---------- KaguEngine/CMakeLists.txt | 4 +- KaguEngine/assets/shaders/simple_shader.frag | 11 +- .../assets/shaders/simple_shader.frag.spv | Bin 4984 -> 5376 bytes KaguEngine/assets/shaders/simple_shader.vert | 1 + .../assets/shaders/simple_shader.vert.spv | Bin 3032 -> 3080 bytes KaguEngine/extern/ImGuiFork | 2 +- KaguEngine/src/App.cpp | 15 +- KaguEngine/src/App.ixx | 1 + KaguEngine/src/Descriptor.cpp | 2 +- KaguEngine/src/Entity.ixx | 1 + KaguEngine/src/FrameInfo.ixx | 2 +- KaguEngine/src/ImGuiContext.cpp | 589 +++++++++--------- KaguEngine/src/ImGuiContext.ixx | 58 +- KaguEngine/src/Renderer.cpp | 4 +- KaguEngine/src/Renderer.ixx | 4 +- KaguEngine/src/SwapChain.cpp | 5 +- KaguEngine/src/systems/RenderSystem.cpp | 2 + 18 files changed, 367 insertions(+), 707 deletions(-) diff --git a/.gitignore b/.gitignore index e865726..b9eec73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,378 +1,9 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - # Jetbrains' .idea folder /.idea/ -/CMakeFiles/ -# Shaders / Code formatting +# Shaders / 3D Models *.spv -/.clang-format - -# Build directory unignore (.spv and .obj files) -!/build/assets/models/*.obj -!/build/assets/shaders/*.spv +*.obj # CMake binary directories /cmake-build-debug/ diff --git a/KaguEngine/CMakeLists.txt b/KaguEngine/CMakeLists.txt index 3fb2433..158c94b 100644 --- a/KaguEngine/CMakeLists.txt +++ b/KaguEngine/CMakeLists.txt @@ -29,8 +29,8 @@ endif() target_include_directories(KaguEngine PRIVATE ${Vulkan_INCLUDE_DIRS}) target_link_libraries(KaguEngine PRIVATE Vulkan::Vulkan) -# Linker options (to disable console window in Release build) -if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") +# Linker options (to disable console window on Windows in Release build) +if(WIN32 AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")) if(MSVC) target_link_options(KaguEngine PRIVATE /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup) else() diff --git a/KaguEngine/assets/shaders/simple_shader.frag b/KaguEngine/assets/shaders/simple_shader.frag index 2782653..563b0bb 100644 --- a/KaguEngine/assets/shaders/simple_shader.frag +++ b/KaguEngine/assets/shaders/simple_shader.frag @@ -26,8 +26,13 @@ layout(set = 0, binding = 0) uniform GlobalUbo { layout(push_constant) uniform Push { mat4 modelMatrix; mat4 normalMatrix; + float modelAlpha; } push; +vec3 srgbToLinear(vec3 srgb) { + return pow(srgb, vec3(1.0/2.2)); +} + void main() { vec3 diffuseLight = ubo.ambientLightColor.xyz * ubo.ambientLightColor.w; vec3 specularLight = vec3(0.0); @@ -56,7 +61,7 @@ void main() { blinnTerm = pow(blinnTerm, 512.0); // higher values -> sharper highlight specularLight += intensity * blinnTerm; } - - sourceColor = vec4(diffuseLight * fragColor + specularLight * fragColor, 1.0); - outColor = vec4(sourceColor.rgb * texture(texSampler, fragTexCoord).rgb, 1.0); + sourceColor = vec4(diffuseLight * fragColor + specularLight * fragColor, push.modelAlpha); + vec4 texColor = vec4(srgbToLinear(texture(texSampler, fragTexCoord).rgb), 1.0); + outColor = vec4(sourceColor * texColor); } diff --git a/KaguEngine/assets/shaders/simple_shader.frag.spv b/KaguEngine/assets/shaders/simple_shader.frag.spv index 5f2fd419e50c91fe0a717e3ea256f477a2201a6e..73a078dbafc485d5288baf180617a2bfae63d50d 100644 GIT binary patch literal 5376 zcmZ9O`*&1V700K9OnJ57fWoIdi~iwckjJJk83MKxuZTCE9)w&;nHH(Xlb|& zx)=He^eXf^w22sf*bHfi9V(T-l3+FQ6O+>u$Bs=*J~&6$p%BORyM`>Y>^4p8f z<+^*s75ff@w+4&(X?n=RWO@sHKy~(ECvvY-uML`6HyR>=lEW5&v&@E+Prz@cV5hM#k=U=e(+v<(5=;r z6I$;!`JRqNb~m@was zy@)$?UcU!6HRvtC*tMGL%8TvUdh=-3?>0_@UY+Bfv6Wv^GL&MRr95W5*;(K~<~|SB zNx7}_0(!rGI=0X2yjWnzv&Bxc&TxBn-?nw0(6`;4Ma}bFf_JiR7U%K(w+H>p`HtWf zZ)k@>tiY^YY!fs=ZCl}0Xe8H%^4a$cN3g{^a;A+B-EWNXW$em6MV$MT)}SDaz&i^%W>)}`gX}}>Ew&6<-$nQ+W=`T+MzLyFz8)#&HG>X19$>O`v^}QCl{f)mL z*o~&&#)OGW=G_9<*E_tC|F46Ksc+|h=UZL64*drB2;_1f^&27o4!s$DE8G|{{kOqK zAp5XAee>NT$h^iBeyhn*oZmOFk9c)w$DX*Ke$hw!@YZBAPt@bRM4xU+cF!1nxfR(J zeR(IcSde*lqg%6mvkrA)MSZe*lU-g6n$#Twl)?xyO)Q zp-&(?r}`g(yRZIRklqjXu8!t>kc&9{cGM z`zMI^q_1z$-(&VL^qnj8T`TlER_J?6x-+%Eq&qkMhKT&$x4#2IcmKyr`YGgWh2ALX z`nOi-PnGmj$Y)Es^;{_F#$QVMI9>26R%hwr|8p1YDQ&T}`qnB7@(1%0t!;nk6XV)&bo^9~=Lgw&3kH8;-?7;*S zKJQETYxwvrnuLrK|2KKm-vhay`IRH~5#%C&HUAzRM>oIUDQ)`s_v8em?Gg5Hh8|5A zEU(R3d<=5_#~{zHu3yBQL^hAT^E}3U2r|a+o-ykBh5f_Gk<(h-`y)_+7xVkkgo(S% zzY5ad+4>k%zSC)RW5nIlH!2qXHDs~SXOsQ{HCK`AkUrw)5;liC18Fm71{aGQ^T_6m z8CpQLPVZV<)FB=*PayjSLjO3jIiijxvOeM)IH|QQLgw|oX}=XRx8E6U(bqO|^xgdS zwF4D+(brETOxzWH^*x?K??RDd2eNsrp_gp&UFf5mOFVoA$o43FmXP%mw_d-4VsZ8- zk;NkZG_q%k_%q1*h)2vPkvBtUxg+P`Q;?Xx?x9UA{6CFse?$Ka@?I$7KZ~r7c--SM za@?bK^ZLyek3644F5lzR==#JxejZsLapTXz#f-O~&p=`u_+G1j0dh}sYV(ery@=Hw zv0p?kVvG6s61uV5AZ_QMh|?A|KZ{)M_jBmxiGF_>Ss(F;`3kag7yWu3SxjH|&?e@$ z?l9bMk=%Ie`6_e}TIRmgzm~B0HfR$oe@hRc$NpbO_D)0pCbGYWo=Nxr0k9qb$mN*tpz9+Z=lU+PxwMUw`$hN~xYjatP zdz=3fT>JgR`-Xl4t%t;;-q#WiyNvxdVdZoEE@9X@ou&M8PZ4G_}3HmA5L>0};s&_+^}8nFepl5uL7v6A N)V2}&FEQfg{~xAU<7)r_ literal 4984 zcmZ9O`IlT(5yu~yg%AP+ktKlR3{g-MBL)&#Ovspo2|AF$gap^2r~6IP*xj$~B_u8| zh-efVGkDZ%n4$J7*rU~6Ump+i<@V__Bh+k$e_P=zMY}gj=q$csu6{9WkJ?3f zj@jhvIh#eN7{HCc7QWOe)*7A1)(T|f#a#VC@uW4I!FX}w&$jcYvV@k*}L$S@$ihgv!L$k7OlMVaAP!Rp98(T#O+b9yyRp+H^*P#{gmS7&@y6)b3kQw{~^sLEWY9 zEYx-9pq^jd{1JaC`CI=I@5j4$FZ-|TihhJ%??+(P>54e>*W=VDF>8^=L--Zk9QxN+=(phc zItKl$=hw+e%zWy;O_#I$Cft0UN&nx%%_XkCx^Gv^e!UBiIn@8p=>ES&Tz_@H(PI1P zzIpAP%QO5N#5>VCVrdn(mDFJ01DG+aopI{a0$bcjxbG z_^Yqhbp2ZsIzM?I@b|aW_(e|XJG%k$E&BfUb7t@LMo9b^9nkltgo(TCwS8OUW_*jc zK#{|DY98x|pG>wm&!^DEBv+iroZg@IsACthSm?Wv{U$t@&h!~%eZ-^IJCUPS?dEk3 z#Fd?ayOQkv?}PqBM?VL5{^b9n5BI|FgIwD0hijKxkKc;VL+0>455OOQ?7{w$DxZVM z;(xF2lRi;%WQ*~1z7Qo>+m zZO;BOeZ4=8PHo zCUVS>wx~lqVxB-=sOb%4b3`3$$WK7xTREw^*bjPz33u~ zMSKt0GevxXtdDra^pUTCp5>05gKtA(`nrcUvG5-v+uzVf$UC8kA0z7{9`|?_*}m8Z z?dJ8HEFO8zAurVQ^T_(dJ$?sSA93TKf{Ph%Kfeo!ZRLBd{yoS&txcPE?CeFX_K5vH zaur+6$1~{0-VAAb8j3h=QS%0Jz2DEGnbr~CgYvOePB^8&JU zh5jOPJ?3ZV`iRFIyo78nZGPLllb=K4uE1VK7PH@hy^=8B(F#+!1^y~zy#CtbF83g7 zvo`&H0g1)?{AI$#UG8IE{a=Uw26`juZ^C~EU4l+gv-#eF^bwDoZzI2z2=-pi=;1qH r?yFy%>G#OuuE73)ELK1J9}{McarQqU8?V3iIQvCpZT};~J<$IFZ3w5c diff --git a/KaguEngine/assets/shaders/simple_shader.vert b/KaguEngine/assets/shaders/simple_shader.vert index a0d79e6..919ec4b 100644 --- a/KaguEngine/assets/shaders/simple_shader.vert +++ b/KaguEngine/assets/shaders/simple_shader.vert @@ -27,6 +27,7 @@ layout(set = 0, binding = 0) uniform GlobalUbo { layout(push_constant) uniform Push { mat4 modelMatrix; mat4 normalMatrix; + float modelAlpha; } push; void main() { diff --git a/KaguEngine/assets/shaders/simple_shader.vert.spv b/KaguEngine/assets/shaders/simple_shader.vert.spv index 1b7f150258162d3288ce92624394b9a09b16c543..de20f400492c2bbd2d71d137e4a0f0fa40b94c7d 100644 GIT binary patch delta 79 zcmca1-XXEUf>Df(fsKKifq{Vuh;#E(Qga-03NjKmn=x);67*nTh07@eb0%9pD*#a_4KM%z delta 34 ncmeB>xFNp5f^l;I;|8Y9A}nQ0+$;>-3=9lhAiQ}dTRtlQoj3<( diff --git a/KaguEngine/extern/ImGuiFork b/KaguEngine/extern/ImGuiFork index 110839b..ee6438e 160000 --- a/KaguEngine/extern/ImGuiFork +++ b/KaguEngine/extern/ImGuiFork @@ -1 +1 @@ -Subproject commit 110839b613c87d5ab2e2afc2231ace55472888c3 +Subproject commit ee6438ed98c06a2153bec15ca9b942957875e2a5 diff --git a/KaguEngine/src/App.cpp b/KaguEngine/src/App.cpp index c435eae..ac33265 100644 --- a/KaguEngine/src/App.cpp +++ b/KaguEngine/src/App.cpp @@ -72,14 +72,15 @@ void App::run() { views.emplace_back(std::move(viewerObject)); views.emplace_back(std::move(otherView)); + glm::vec4 ambientLightColor = { 0.2f, 0.2f, 0.2f, 1.0f }; ImGuiContext imGuiContext( m_Window, *m_Renderer.getSwapChain(), m_Device, m_DescriptorPool, - m_SceneEntities, views, camera + m_SceneEntities, views, camera, ambientLightColor ); auto currentTime = std::chrono::high_resolution_clock::now(); - while (!m_Window.shouldClose()) { + while (!m_Window.shouldClose() && m_IsRunning) { KeyboardMovementController cameraController{}; glfwPollEvents(); @@ -87,11 +88,11 @@ void App::run() { float frameTime = std::chrono::duration(newTime - currentTime).count(); currentTime = newTime; - cameraController.moveInPlaneXZ(m_Window.getGLFWwindow(), frameTime, views[imGuiContext.getCamIdx()]); - camera.setViewYXZ(views[imGuiContext.getCamIdx()].transform.translation, views[imGuiContext.getCamIdx()].transform.rotation); + cameraController.moveInPlaneXZ(m_Window.getGLFWwindow(), frameTime, imGuiContext.getView()); + camera.setViewYXZ(imGuiContext.getView().transform.translation, imGuiContext.getView().transform.rotation); float aspect = m_Renderer.getAspectRatio(); - camera.setPerspectiveProjection(glm::radians(imGuiContext.getFovY()), aspect, 0.1f, imGuiContext.getDepth()); + camera.setPerspectiveProjection(imGuiContext.getFovY(), aspect, 0.1f, imGuiContext.getDepth()); if (auto commandBuffer = m_Renderer.beginFrame()) { int frameIndex = m_Renderer.getFrameIndex(); @@ -104,6 +105,7 @@ void App::run() { ubo.projection = camera.getProjection(); ubo.view = camera.getView(); ubo.inverseView = camera.getInverseView(); + ubo.ambientLightColor = imGuiContext.getAmbientLightColor(); PointLightSystem::update(frameInfo, ubo); uboBuffers[frameIndex]->writeToBuffer(&ubo); if(uboBuffers[frameIndex]->flush() != VK_SUCCESS) @@ -121,11 +123,12 @@ void App::run() { // Present the image m_Renderer.beginSwapChainRenderPass(commandBuffer); - imGuiContext.onPresent(commandBuffer); + ImGuiContext::onPresent(commandBuffer); m_Renderer.endSwapChainRenderPass(commandBuffer); m_Renderer.endFrame(); } + m_IsRunning = imGuiContext.isRunning(); } vkDeviceWaitIdle(m_Device.device()); diff --git a/KaguEngine/src/App.ixx b/KaguEngine/src/App.ixx index 390de78..27541c2 100644 --- a/KaguEngine/src/App.ixx +++ b/KaguEngine/src/App.ixx @@ -56,6 +56,7 @@ public: private: void loadGameObjects(); + bool m_IsRunning = true; Window m_Window{WIDTH, HEIGHT, "Kagu Engine"}; Device m_Device{m_Window}; diff --git a/KaguEngine/src/Descriptor.cpp b/KaguEngine/src/Descriptor.cpp index 69848de..9f66212 100644 --- a/KaguEngine/src/Descriptor.cpp +++ b/KaguEngine/src/Descriptor.cpp @@ -159,7 +159,7 @@ DescriptorWriter &DescriptorWriter::writeImage(const uint32_t binding, const VkD } bool DescriptorWriter::build(VkDescriptorSet &set) { - if (const bool success = poolRef.allocateDescriptor(setLayoutRef.getDescriptorSetLayout(), set); !success) { + if (!poolRef.allocateDescriptor(setLayoutRef.getDescriptorSetLayout(), set)) { return false; } overwrite(set); diff --git a/KaguEngine/src/Entity.ixx b/KaguEngine/src/Entity.ixx index 204823b..9c393b8 100644 --- a/KaguEngine/src/Entity.ixx +++ b/KaguEngine/src/Entity.ixx @@ -23,6 +23,7 @@ struct TransformComponent { // https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix [[nodiscard]] glm::mat4 mat4() const; [[nodiscard]] glm::mat3 normalMatrix() const; + float alpha = 1.0f; }; struct PointLightComponent { diff --git a/KaguEngine/src/FrameInfo.ixx b/KaguEngine/src/FrameInfo.ixx index 6345403..bfacb7f 100644 --- a/KaguEngine/src/FrameInfo.ixx +++ b/KaguEngine/src/FrameInfo.ixx @@ -22,7 +22,7 @@ struct GlobalUbo { glm::mat4 projection{1.f}; glm::mat4 view{1.f}; glm::mat4 inverseView{1.f}; - glm::vec4 ambientLightColor{1.f, 1.f, 1.f, 0.02f}; // w is intensity + glm::vec4 ambientLightColor{0.2f, 0.2f, 0.2f, 1.f}; // w is intensity PointLight pointLights[MAX_LIGHTS]; int numLights; }; diff --git a/KaguEngine/src/ImGuiContext.cpp b/KaguEngine/src/ImGuiContext.cpp index f1bca51..c7daa77 100644 --- a/KaguEngine/src/ImGuiContext.cpp +++ b/KaguEngine/src/ImGuiContext.cpp @@ -4,6 +4,7 @@ module; #include "include/font_awesome.hpp" #include "include/imgui_includes.hpp" #include +#include module KaguEngine.ImGuiContext; @@ -14,18 +15,91 @@ import KaguEngine.SwapChain; import KaguEngine.Renderer; import KaguEngine.Window; -static void check_result(VkResult err) { - //std::cout << err << std::endl; -} - namespace KaguEngine { +namespace UI_Helpers { + static bool DrawVec3Control(const std::string& label, glm::vec3& values, float resetValue = 0.0f, float columnWidth = 100.0f) { + bool value_changed = false; + ImGuiIO& io = ImGui::GetIO(); + auto boldFont = io.Fonts->Fonts[0]; + + ImGui::PushID(label.c_str()); + + ImGui::Columns(2); + ImGui::SetColumnWidth(0, columnWidth); + ImGui::Text("%s", label.c_str()); + ImGui::NextColumn(); + + ImGui::PushMultiItemsWidths(3, ImGui::CalcItemWidth()); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2{ 0, 0 }); + + float lineHeight = GImGui->Font->FontSize + GImGui->Style.FramePadding.y * 2.0f; + ImVec2 buttonSize = { lineHeight + 3.0f, lineHeight }; + + // X + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.9f, 0.2f, 0.2f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.8f, 0.1f, 0.15f, 1.0f }); + ImGui::PushFont(boldFont); + if (ImGui::Button("X", buttonSize)) { + values.x = resetValue; + value_changed = true; + } + ImGui::PopFont(); + ImGui::PopStyleColor(3); + + ImGui::SameLine(); + if(ImGui::DragFloat("##X", &values.x, 0.1f, 0.0f, 0.0f, "%.2f")) value_changed = true; + ImGui::PopItemWidth(); + ImGui::SameLine(); + + // Y + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.3f, 0.8f, 0.3f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.2f, 0.7f, 0.2f, 1.0f }); + ImGui::PushFont(boldFont); + if (ImGui::Button("Y", buttonSize)) { + values.y = resetValue; + value_changed = true; + } + ImGui::PopFont(); + ImGui::PopStyleColor(3); + + ImGui::SameLine(); + if(ImGui::DragFloat("##Y", &values.y, 0.1f, 0.0f, 0.0f, "%.2f")) value_changed = true; + ImGui::PopItemWidth(); + ImGui::SameLine(); + + // Z + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{ 0.2f, 0.35f, 0.9f, 1.0f }); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4{ 0.1f, 0.25f, 0.8f, 1.0f }); + ImGui::PushFont(boldFont); + if (ImGui::Button("Z", buttonSize)) { + values.z = resetValue; + value_changed = true; + } + ImGui::PopFont(); + ImGui::PopStyleColor(3); + + ImGui::SameLine(); + if(ImGui::DragFloat("##Z", &values.z, 0.1f, 0.0f, 0.0f, "%.2f")) value_changed = true; + ImGui::PopItemWidth(); + + ImGui::PopStyleVar(); + ImGui::Columns(1); + ImGui::PopID(); + + return value_changed; + } +} + ImGuiContext::ImGuiContext( Window &window, SwapChain &swapChain, Device &device, std::unique_ptr &pool, - Entity::Map& sceneEntities, std::vector& views, Camera& camera + Entity::Map& sceneEntities, std::vector& views, Camera& camera, glm::vec4& ambientLight ) : - poolRef{pool}, viewsRef{views}, entitiesRef{sceneEntities}, cameraRef{camera}, deviceRef{device}, swapChainRef{swapChain}, windowRef{window} { + ambientLightColor{ambientLight}, poolRef{pool}, viewsRef{views}, entitiesRef{sceneEntities}, cameraRef{camera}, deviceRef{device}, swapChainRef{swapChain}, windowRef{window} { IMGUI_CHECKVERSION(); ImGui::CreateContext(); setupConfigFlags(); @@ -56,12 +130,9 @@ void ImGuiContext::setupStyle() { style.Colors[ImGuiCol_WindowBg].w = 1.0f; } - // Fonts sizes constexpr float baseFontSize = 18.0f; constexpr float iconFontSize = baseFontSize * 2.0f / 3.0f; - // Base regular font io.FontDefault = io.Fonts->AddFontFromFileTTF("assets/fonts/roboto/Roboto-Regular.ttf", baseFontSize); - // Icons font ImFontConfig icons_config; icons_config.MergeMode = true; icons_config.PixelSnapH = true; @@ -69,7 +140,7 @@ void ImGuiContext::setupStyle() { static constexpr ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_16_FA, 0 }; io.Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_FA, iconFontSize, &icons_config, icons_ranges); - // Theme + Style + ImGui::StyleColorsDark(); setAppTheme(); setStyleVars(); } @@ -91,178 +162,55 @@ void ImGuiContext::setupContext() const { init_info.MinImageCount = SwapChain::MAX_FRAMES_IN_FLIGHT; init_info.MSAASamples = deviceRef.getSampleCount(); init_info.ImageCount = SwapChain::MAX_FRAMES_IN_FLIGHT; - init_info.CheckVkResultFn = check_result; ImGui_ImplVulkan_Init(&init_info); ImGui_ImplVulkan_CreateFontsTexture(); } -void ImGuiContext::setStyleVars() { - ImGuiStyle& style = ImGui::GetStyle(); - - // === Main === - style.WindowPadding = ImVec2(8, 8); - style.FramePadding = ImVec2(4, 4); - style.ItemSpacing = ImVec2(8, 4); - style.ItemInnerSpacing = ImVec2(4, 4); - style.TouchExtraPadding = ImVec2(4, 4); - style.IndentSpacing = 21.0f; - style.ScrollbarSize = 14.0f; - style.GrabMinSize = 12.0f; - - // === Borders === - style.WindowBorderSize = 1.0f; - style.ChildBorderSize = 0.0f; - style.PopupBorderSize = 1.0f; - style.FrameBorderSize = 0.0f; - - // === Rounding === - style.WindowRounding = 0.0f; - style.ChildRounding = 0.0f; - style.FrameRounding = 8.0f; - style.PopupRounding = 8.0f; - style.ScrollbarRounding = 8.0f; - style.GrabRounding = 8.0f; - - // === Tabs === - style.TabBorderSize = 0.0f; - style.TabBarBorderSize = 0.0f; - style.TabBarOverlineSize = 0.0f; - style.TabCloseButtonMinWidthSelected = -1.0f; // Always - style.TabCloseButtonMinWidthUnselected = 0.0f; - style.TabRounding = 0.0f; - - // === Tables === - style.CellPadding = ImVec2(4, 2); - style.TableAngledHeadersAngle = 35.0f; // degrees - style.TableAngledHeadersTextAlign = ImVec2(0.50f, 0.00f); // center - - // === Trees === - style.TreeLinesFlags = ImGuiTreeNodeFlags_None; // DrawLinesNone - style.TreeLinesSize = 0.0f; - style.TreeLinesRounding = 0.0f; - - // === Windows === - style.WindowTitleAlign = ImVec2(0.00f, 0.50f); - style.WindowMenuButtonPosition = ImGuiDir_None; - style.WindowBorderHoverPadding = 5.0f; - - // === Widgets === - style.ColorButtonPosition = ImGuiDir_Right; - style.ButtonTextAlign = ImVec2(0.50f, 0.50f); - style.SelectableTextAlign = ImVec2(0.00f, 0.00f); - style.SeparatorTextBorderSize = 3.0f; - style.SeparatorTextAlign = ImVec2(0.00f, 0.50f); - style.SeparatorTextPadding = ImVec2(20.0f, 3.0f); - style.LogSliderDeadzone = 4.0f; - style.ImageBorderSize = 0.0f; - - // === Docking === - style.DockingSeparatorSize = 2.0f; - - // === Misc === - style.DisplayWindowPadding = ImVec2(19, 19); - style.DisplaySafeAreaPadding = ImVec2(3, 3); -} - void ImGuiContext::setAppTheme() { ImVec4* colors = ImGui::GetStyle().Colors; + colors[ImGuiCol_WindowBg] = ImVec4(0.149f, 0.149f, 0.149f, 1.0f); + colors[ImGuiCol_Header] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f }; + colors[ImGuiCol_HeaderHovered] = ImVec4{ 0.3f, 0.305f, 0.31f, 1.0f }; + colors[ImGuiCol_HeaderActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_Button] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f }; + colors[ImGuiCol_ButtonHovered] = ImVec4{ 0.3f, 0.305f, 0.31f, 1.0f }; + colors[ImGuiCol_ButtonActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_FrameBg] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f }; + colors[ImGuiCol_FrameBgHovered] = ImVec4{ 0.3f, 0.305f, 0.31f, 1.0f }; + colors[ImGuiCol_FrameBgActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_Tab] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_TabHovered] = ImVec4{ 0.38f, 0.3805f, 0.381f, 1.0f }; + colors[ImGuiCol_TabActive] = ImVec4{ 0.28f, 0.2805f, 0.281f, 1.0f }; + colors[ImGuiCol_TabUnfocused] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_TabUnfocusedActive] = ImVec4{ 0.2f, 0.205f, 0.21f, 1.0f }; + colors[ImGuiCol_TitleBg] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_TitleBgActive] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; + colors[ImGuiCol_TitleBgCollapsed] = ImVec4{ 0.15f, 0.1505f, 0.151f, 1.0f }; +} - // ---- Text ---- - colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Main text (white) - colors[ImGuiCol_TextDisabled] = ImVec4(0.56f, 0.59f, 0.65f, 1.00f); // Disabled text (gray) - - // ---- Backgrounds ---- - colors[ImGuiCol_WindowBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f); // Window background - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); // Child window background - colors[ImGuiCol_PopupBg] = ImVec4(0.12f, 0.12f, 0.12f, 1.00f); // Popup/tooltip background - - // ---- Borders ---- - colors[ImGuiCol_Border] = ImVec4(0.20f, 0.20f, 0.23f, 1.00f); // Borders - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); // Border shadow (unused) - - // ---- Frame Backgrounds (Inputs, etc) ---- - colors[ImGuiCol_FrameBg] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Input fields, etc. - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); // Input hover - colors[ImGuiCol_FrameBgActive] = ImVec4(0.22f, 0.22f, 0.22f, 1.00f); // Input active - - // ---- Title Bar ---- - colors[ImGuiCol_TitleBg] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Title bar background (inactive/active) - colors[ImGuiCol_TitleBgActive] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Title bar background (active) - colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.13f, 0.14f, 0.16f, 1.00f); // Title bar background (collapsed) - - // ---- Menu Bar ---- - colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); // Menu bar background - - // ---- Scrollbar ---- - colors[ImGuiCol_ScrollbarBg] = ImVec4(0.11f, 0.12f, 0.13f, 1.00f); // Scrollbar background - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.18f, 0.20f, 0.25f, 1.00f); // Scrollbar grab - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.30f, 0.31f, 0.37f, 1.00f); // Scrollbar grab (hover) - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.52f, 0.53f, 0.57f, 1.00f); // Scrollbar grab (active) - - // ---- Controls: Check, Slider, Button ---- - colors[ImGuiCol_CheckMark] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Checkbox check mark (white) - colors[ImGuiCol_SliderGrab] = ImVec4(0.46f, 0.49f, 0.55f, 1.00f); // Slider grab - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.27f, 0.30f, 0.38f, 1.00f); // Slider grab (active) - - colors[ImGuiCol_Button] = ImVec4(0.11f, 0.11f, 0.11f, 1.00f); // Button - colors[ImGuiCol_ButtonHovered] = ImVec4(0.25f, 0.31f, 0.44f, 1.00f); // Button (hover) - colors[ImGuiCol_ButtonActive] = ImVec4(0.27f, 0.39f, 0.64f, 1.00f); // Button (active) - - // ---- Headers & Collapsing ---- - colors[ImGuiCol_Header] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); // Header (tree, table, etc.) - colors[ImGuiCol_HeaderHovered] = ImVec4(0.25f, 0.31f, 0.44f, 1.00f); // Header (hover) - colors[ImGuiCol_HeaderActive] = ImVec4(0.27f, 0.39f, 0.64f, 1.00f); // Header (active) - - // ---- Separators ---- - colors[ImGuiCol_Separator] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Separator line - colors[ImGuiCol_SeparatorHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Separator (hover) - colors[ImGuiCol_SeparatorActive] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Separator (active) - - // ---- Resize Grips ---- - colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Resize grip - colors[ImGuiCol_ResizeGripHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Resize grip (hover) - colors[ImGuiCol_ResizeGripActive] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Resize grip (active) - - // ---- Input Text Cursor ---- - colors[ImGuiCol_InputTextCursor] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Input text cursor - - // ---- Tabs ---- - colors[ImGuiCol_Tab] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); // Tab background - colors[ImGuiCol_TabHovered] = ImVec4(0.26f, 0.33f, 0.48f, 1.00f); // Tab (hover) - colors[ImGuiCol_TabSelected] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f); // Tab (selected) - colors[ImGuiCol_TabSelectedOverline] = ImVec4(1.00f, 1.00f, 1.00f, 0.00f); // Tab (selected overline) - colors[ImGuiCol_TabDimmed] = ImVec4(0.12f, 0.13f, 0.14f, 1.00f); // Tab (dimmed) - colors[ImGuiCol_TabDimmedSelected] = ImVec4(0.40f, 0.40f, 0.40f, 1.00f); // Tab (dimmed selected) - colors[ImGuiCol_TabDimmedSelectedOverline] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); // Tab (dimmed selected overline) - - // ---- Docking ---- - colors[ImGuiCol_DockingPreview] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Docking preview highlight - colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.11f, 0.12f, 0.13f, 1.00f); // Dockspace background - - // ---- Plots ---- - colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Line plot - colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Line plot (hover) - colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Histogram bar - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); // Histogram bar (hover) - - // ---- Tables ---- - colors[ImGuiCol_TableHeaderBg] = ImVec4(0.17f, 0.20f, 0.27f, 1.00f); // Table header - colors[ImGuiCol_TableBorderStrong] = ImVec4(0.18f, 0.21f, 0.30f, 1.00f); // Table strong border - colors[ImGuiCol_TableBorderLight] = ImVec4(0.16f, 0.18f, 0.24f, 1.00f); // Table light border - colors[ImGuiCol_TableRowBg] = ImVec4(0.15f, 0.16f, 0.20f, 1.00f); // Table row - colors[ImGuiCol_TableRowBgAlt] = ImVec4(0.15f, 0.16f, 0.20f, 1.00f); // Table row (alternate) - - // ---- Misc/Links/Selection ---- - colors[ImGuiCol_TextLink] = ImVec4(0.36f, 0.57f, 1.00f, 1.00f); // Hyperlink color - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.50f, 0.66f, 1.00f, 1.00f); // Text selection background - colors[ImGuiCol_TreeLines] = ImVec4(0.22f, 0.24f, 0.32f, 1.00f); // Tree node lines - - // ---- Drag & Navigation ---- - colors[ImGuiCol_DragDropTarget] = ImVec4(0.36f, 0.57f, 1.00f, 1.00f); // Drag-drop target - colors[ImGuiCol_NavCursor] = ImVec4(0.49f, 0.66f, 1.00f, 1.00f); // Navigation cursor - colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); // Windowing highlight - colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.18f, 0.18f, 0.22f, 0.20f); // Windowing dim background - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.10f, 0.12f, 0.18f, 0.45f); // Modal window dim background +void ImGuiContext::setStyleVars() { + ImGuiStyle& style = ImGui::GetStyle(); + style.WindowPadding = ImVec2(8, 8); + style.FramePadding = ImVec2(4, 4); + style.ItemSpacing = ImVec2(8, 4); + style.ItemInnerSpacing = ImVec2(4, 4); + style.IndentSpacing = 21.0f; + style.ScrollbarSize = 14.0f; + style.GrabMinSize = 12.0f; + style.WindowBorderSize = 1.0f; + style.ChildBorderSize = 1.0f; + style.PopupBorderSize = 1.0f; + style.FrameBorderSize = 0.0f; + style.WindowRounding = 0.0f; + style.ChildRounding = 0.0f; + style.FrameRounding = 0.0f; + style.PopupRounding = 2.0f; + style.ScrollbarRounding = 2.0f; + style.GrabRounding = 2.0f; + style.TabBorderSize = 0.0f; + style.TabRounding = 0.0f; + style.WindowTitleAlign = ImVec2(0.5f, 0.5f); + style.ButtonTextAlign = ImVec2(0.5f, 0.5f); } void ImGuiContext::recreateSwapChain() { @@ -282,7 +230,7 @@ void ImGuiContext::beginRender() { void ImGuiContext::onRender(const Renderer& renderer) { const ImGuiViewport* viewport = setupViewport(); - const ImGuiID dockspace_id = setDockspaceID(); + const ImGuiID dockspace_id = getDockspaceID(); static bool dockspaceInitialized = false; if (!dockspaceInitialized) { @@ -290,10 +238,12 @@ void ImGuiContext::onRender(const Renderer& renderer) { dockspaceInitialized = true; } + // Render all UI panels render3DScene(renderer); - renderSceneSpecs(); - // Demo - ImGui::ShowDemoWindow(); + renderSceneHierarchyPanel(); + renderPropertiesPanel(); + renderVisualsPanel(); + renderConsole(); } ImGuiViewport* ImGuiContext::setupViewport() { @@ -304,7 +254,7 @@ ImGuiViewport* ImGuiContext::setupViewport() { return viewport; } -ImGuiID ImGuiContext::setDockspaceID() { +ImGuiID ImGuiContext::getDockspaceID() { constexpr ImGuiWindowFlags hostFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus | @@ -320,30 +270,6 @@ ImGuiID ImGuiContext::setDockspaceID() { return dockspace_id; } -void ImGuiContext::initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport) { - ImGui::DockBuilderRemoveNode(dockspace_id); - ImGui::DockBuilderAddNode(dockspace_id, ImGuiDockNodeFlags_DockSpace | ImGuiDockNodeFlags_AutoHideTabBar); - ImGui::DockBuilderSetNodeSize(dockspace_id, viewport->WorkSize); - - ImGuiID dock_id_demo, dock_id_specs, dock_id_viewport; - ImGui::DockBuilderSplitNode(dockspace_id, ImGuiDir_Left, 0.2f, &dock_id_demo, &dock_id_viewport); - ImGui::DockBuilderSplitNode(dock_id_viewport, ImGuiDir_Right, 0.25f, &dock_id_specs, &dock_id_viewport); - - // Set the flag using internal node access - if (ImGuiDockNode* node = ImGui::DockBuilderGetNode(dock_id_demo)) - node->LocalFlags |= ImGuiDockNodeFlags_AutoHideTabBar; - if (ImGuiDockNode* node = ImGui::DockBuilderGetNode(dock_id_specs)) - node->LocalFlags |= ImGuiDockNodeFlags_AutoHideTabBar; - if (ImGuiDockNode* node = ImGui::DockBuilderGetNode(dock_id_viewport)) - node->LocalFlags |= ImGuiDockNodeFlags_AutoHideTabBar; - - ImGui::DockBuilderDockWindow("3D Scene", dock_id_viewport); - ImGui::DockBuilderDockWindow("Scene specs", dock_id_specs); - ImGui::DockBuilderDockWindow("Dear ImGui Demo", dock_id_demo); - - ImGui::DockBuilderFinish(dockspace_id); -} - void ImGuiContext::drawMainMenuBar() { const ImGuiIO& io = ImGui::GetIO(); ImGui::PushStyleVarY(ImGuiStyleVar_FramePadding, 5.f); @@ -351,26 +277,8 @@ void ImGuiContext::drawMainMenuBar() { if (ImGui::BeginMainMenuBar()) { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(12, 8)); if (ImGui::BeginMenu((std::string(ICON_FA_FILE) + " File").c_str())) { - if (ImGui::BeginMenu((std::string(ICON_FA_FILE_ARCHIVE_O) + " Save").c_str())) { - if (ImGui::MenuItem((std::string(ICON_FA_CHECK) + " Save Current").c_str(), "Ctrl+S")) { - // TODO: Save scene - } - if (ImGui::MenuItem((std::string(ICON_FA_QUESTION) + " Save As...").c_str(), "Ctrl+Maj+S")) { - // TODO: Save scene as - } - ImGui::EndMenu(); - } - if (ImGui::MenuItem((std::string(ICON_FA_FOLDER_OPEN) + " Open").c_str(), "Ctrl+O")) { - // TODO: OpenScene(path) - } - if (ImGui::MenuItem((std::string(ICON_FA_CHECK) + " New").c_str(), "Ctrl+N")) { - // TODO: New scene - } - if (ImGui::MenuItem((std::string(ICON_FA_CROSSHAIRS) + " Close").c_str(), "Ctrl+W")) { - // TODO: Close scene - } - if (ImGui::MenuItem((std::string(ICON_FA_WINDOW_CLOSE) + " Exit").c_str() , "Ctrl+Q")) { - // TODO: Close window + if (ImGui::MenuItem((std::string(ICON_FA_WINDOW_CLOSE) + " Exit").c_str(), "Ctrl+Q")) { + m_IsRunning = false; } ImGui::EndMenu(); } @@ -391,106 +299,191 @@ void ImGuiContext::drawMainMenuBar() { ImGui::PopStyleVar(); } -void ImGuiContext::render3DScene(const Renderer& renderer) { - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); - ImGui::Begin("3D Scene", nullptr, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoMove); - const ImVec2 availableSpace = ImGui::GetContentRegionAvail(); - ImGui::Image(reinterpret_cast(renderer.getOffscreenImGuiDescriptorSet()), availableSpace); - ImGui::End(); - ImGui::PopStyleVar(); -} +void ImGuiContext::initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport) { + ImGui::DockBuilderRemoveNode(dockspace_id); + ImGui::DockBuilderAddNode(dockspace_id, ImGuiDockNodeFlags_DockSpace); + ImGui::DockBuilderSetNodeSize(dockspace_id, viewport->WorkSize); -inline void DrawVec3Control(const std::string& label, glm::vec3& values, const glm::vec3 resetValue = {0.0f, 0.0f, 0.0f}, const float columnWidth = 180.0f, const bool isLight = false) { - ImGui::PushID(label.c_str()); - std::string x = "X", y = "Y", z = "Z"; - if(isLight){ x = "R"; y = "G"; z = "B"; } - const std::string hashX = "##" + x; - const std::string hashY = "##" + y; - const std::string hashZ = "##" + z; + // Main dockspace: left panel and a "main" area + ImGuiID dock_id_left, dock_id_main; + ImGui::DockBuilderSplitNode(dockspace_id, ImGuiDir_Left, 0.2f, &dock_id_left, &dock_id_main); - if (ImGui::BeginTable("Vec3Table", 2, ImGuiTableFlags_SizingFixedFit)) - { - ImGui::TableSetupColumn("Label", ImGuiTableColumnFlags_WidthFixed, columnWidth); - ImGui::TableSetupColumn("Controls", ImGuiTableColumnFlags_WidthStretch); + // "main" area: right panel and a "center" area + ImGuiID dock_id_right, dock_id_center; + ImGui::DockBuilderSplitNode(dock_id_main, ImGuiDir_Right, 0.25f, &dock_id_right, &dock_id_center); - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); - ImGui::Text("%s", label.c_str()); + // "center" area: viewport on top, console on bottom + ImGuiID dock_id_viewport, dock_id_console; + ImGui::DockBuilderSplitNode(dock_id_center, ImGuiDir_Down, 0.25f, &dock_id_console, &dock_id_viewport); - ImGui::TableSetColumnIndex(1); + // Left panel: hierarchy on top, properties on bottom + ImGuiID dock_id_hierarchy, dock_id_properties; + ImGui::DockBuilderSplitNode(dock_id_left, ImGuiDir_Down, 0.5f, &dock_id_properties, &dock_id_hierarchy); - ImGui::PushMultiItemsWidths(3, ImGui::CalcItemWidth()); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2{ 0, 0 }); + // Dock windows + ImGui::DockBuilderDockWindow("Scene Hierarchy", dock_id_hierarchy); + ImGui::DockBuilderDockWindow("Properties", dock_id_properties); + ImGui::DockBuilderDockWindow("3D Scene", dock_id_viewport); + ImGui::DockBuilderDockWindow("Visuals", dock_id_right); + ImGui::DockBuilderDockWindow("Console", dock_id_console); - const float lineHeight = ImGui::GetFont()->FontSize + ImGui::GetStyle().FramePadding.y * 2.0f; - const ImVec2 buttonSize = { lineHeight + 3.0f, lineHeight }; + ImGui::DockBuilderFinish(dockspace_id); +} - // X - if (ImGui::Button(x.c_str(), buttonSize)) - values.x = resetValue.x; - ImGui::SameLine(); - ImGui::DragFloat(hashX.c_str(), &values.x, 0.1f, 0.0f, 0.0f, "%.2f"); - ImGui::PopItemWidth(); +void ImGuiContext::render3DScene(const Renderer& renderer) const { + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); + ImGui::Begin("3D Scene", nullptr, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); + + const float fovx = getFovX(); + const float fovy = getFovY(); + const float nativeAspect = tan(fovx / 2.0f) / tan(fovy / 2.0f); + const ImVec2 viewportSpace = ImGui::GetContentRegionAvail(); + const float viewportAspect = viewportSpace.x / viewportSpace.y; + + float idealWidth = viewportSpace.y * nativeAspect; + float idealHeight = viewportSpace.x / nativeAspect; + + ImVec2 renderSize; + if (viewportAspect > nativeAspect) { + renderSize = { viewportSpace.x, idealHeight }; + } else { + renderSize = { idealWidth, viewportSpace.y }; + } - ImGui::SameLine(); - // Y - if (ImGui::Button(y.c_str(), buttonSize)) - values.y = resetValue.y; - ImGui::SameLine(); - ImGui::DragFloat(hashY.c_str(), &values.y, 0.1f, 0.0f, 0.0f, "%.2f"); - ImGui::PopItemWidth(); + ImVec2 imagePos = { + (viewportSpace.x - renderSize.x) * 0.5f, + (viewportSpace.y - renderSize.y) * 0.5f + }; + ImGui::SetCursorPos(imagePos); + ImGui::Image(reinterpret_cast(renderer.getOffscreenImGuiDescriptorSet()), renderSize); - ImGui::SameLine(); - // Z - if (ImGui::Button(z.c_str(), buttonSize)) - values.z = resetValue.z; - ImGui::SameLine(); - ImGui::DragFloat(hashZ.c_str(), &values.z, 0.1f, 0.0f, 0.0f, "%.2f"); - ImGui::PopItemWidth(); + ImGui::End(); + ImGui::PopStyleVar(); +} - ImGui::PopStyleVar(); +void ImGuiContext::renderSceneHierarchyPanel() { + ImGui::Begin("Scene Hierarchy"); - ImGui::EndTable(); + if (ImGui::TreeNodeEx("Scene", ImGuiTreeNodeFlags_DefaultOpen)) { + for (auto& [id, entity] : entitiesRef) { + std::string name = entity.pointLight != nullptr ? std::string(ICON_FA_LIGHTBULB_O) + " Point Light " + std::to_string(id) : std::string(ICON_FA_CUBE) + " " + entity.name; + + bool is_selected = (m_SelectedEntityID == id); + if (ImGui::Selectable(name.c_str(), is_selected)) { + m_SelectedEntityID = id; + } + } + ImGui::TreePop(); + } + + // Deselect if clicking in empty space + if (ImGui::IsMouseDown(0) && ImGui::IsWindowHovered()) { + m_SelectedEntityID = std::numeric_limits::max(); } - ImGui::PopID(); + ImGui::End(); } -void ImGuiContext::moveSceneEntities() const { - ImGui::Begin("Entities"); - for (auto &[id, entity] : entitiesRef) { - std::string headerLabel; - if (entity.pointLight != nullptr) { - headerLabel = "Point light " + std::to_string(id); +void ImGuiContext::renderPropertiesPanel() { + ImGui::Begin("Properties"); + + if (m_SelectedEntityID != std::numeric_limits::max()) { + auto& entity = entitiesRef.at(m_SelectedEntityID); + + // Name + char buffer[256]; + strncpy(buffer, entity.name.c_str(), sizeof(buffer)); + if (ImGui::InputText("Name", buffer, sizeof(buffer))) { + entity.name = std::string(buffer); } - else { - headerLabel = entity.name; + + // Transform Component + if (ImGui::CollapsingHeader("Transform", ImGuiTreeNodeFlags_DefaultOpen)) { + UI_Helpers::DrawVec3Control("Translation", entity.transform.translation, 0.0f); + UI_Helpers::DrawVec3Control("Rotation", entity.transform.rotation, 0.0f); + UI_Helpers::DrawVec3Control("Scale", entity.transform.scale, 1.0f); } - if (ImGui::CollapsingHeader(headerLabel.c_str())) { - ImGui::PushID(static_cast(id)); - if (entity.pointLight != nullptr) { - DrawVec3Control("Color", entity.color, {0, 0, 0}, 180, true); - } - else { - DrawVec3Control("Translation", entity.transform.translation); - DrawVec3Control("Rotation", entity.transform.rotation); - DrawVec3Control("Scale", entity.transform.scale); + // Material/Color Component + if (entity.texture == nullptr && entity.pointLight == nullptr) { + if (ImGui::CollapsingHeader("Material", ImGuiTreeNodeFlags_DefaultOpen)) { + ImGui::ColorEdit3("Color", glm::value_ptr(entity.color)); } + } - ImGui::PopID(); + // Point Light Component + if (entity.pointLight) { + if (ImGui::CollapsingHeader("Point Light", ImGuiTreeNodeFlags_DefaultOpen)) { + ImGui::ColorEdit3("Color", glm::value_ptr(entity.color)); + ImGui::DragFloat("Intensity", &entity.pointLight->lightIntensity, 0.1f, 0.0f, 100.0f); + } } + } else { + ImGui::Text("Select an entity to view its properties."); } + ImGui::End(); } -void ImGuiContext::renderSceneSpecs() { - ImGui::Begin("Scene specs", nullptr); - ImGui::SliderFloat("Depth", &m_MaxDepth[m_camIdx], 1.0f, 100.f); - ImGui::SliderFloat("FOV-Y", &m_FovY[m_camIdx], 30.f, 120.f); - ImGui::SliderInt("Camera index", &m_camIdx, 0, 1); +void ImGuiContext::renderVisualsPanel() { + ImGui::Begin("Visuals"); + + ImGui::Text("Camera"); + ImGui::SliderInt("##Camera", &m_CamIdx, 0, 1, "View %d"); + ImGui::DragFloat("Depth", &m_MaxDepth[m_CamIdx], 1.0f, 1.0f, 100.f); + ImGui::DragFloat("FOV-X", &m_FovX[m_CamIdx], 1.0f, 30.f, 120.f); + ImGui::DragFloat("FOV-Y", &m_FovY[m_CamIdx], 1.0f, 30.f, 120.f); + + ImGui::Separator(); + + ImGui::Text("Lighting"); + ImGui::ColorEdit4("Ambient Light", glm::value_ptr(ambientLightColor)); + + ImGui::End(); +} + +void ImGuiContext::renderConsole() { + ImGui::Begin("Console", &m_ConsoleOpened); + + if (ImGui::SmallButton("Clear")) { m_Items.clear(); } + ImGui::Separator(); + + const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); + if (ImGui::BeginChild("ScrollingRegion", ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags_HorizontalScrollbar)) { + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4, 1)); + for (auto& item : m_Items) { + ImVec4 color = { 1.0f, 1.0f, 1.0f, 1.0f }; // Default + if (strstr(item.c_str(), "[Error]")) { color = ImVec4(1.0f, 0.4f, 0.4f, 1.0f); } + else if (strstr(item.c_str(), "[Hint]")) { color = ImVec4(0.6f, 0.8f, 1.0f, 1.0f); } + else if (strstr(item.c_str(), "[Info]")) { color = ImVec4(0.7f, 0.7f, 0.7f, 1.0f); } + ImGui::PushStyleColor(ImGuiCol_Text, color); + ImGui::TextUnformatted(item.c_str()); + ImGui::PopStyleColor(); + } + + if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) + ImGui::SetScrollHereY(1.0f); + + ImGui::PopStyleVar(); + } + ImGui::EndChild(); + ImGui::Separator(); + + bool reclaim_focus = false; + if (ImGui::InputText("Input", m_InputBuffer, IM_ARRAYSIZE(m_InputBuffer), ImGuiInputTextFlags_EnterReturnsTrue)) { + if (m_InputBuffer[0] != '\0') { + m_Items.emplace_back(std::string("> ") + m_InputBuffer); + // Command processing if needed later happens here + memset(m_InputBuffer, 0, sizeof(m_InputBuffer)); + } + reclaim_focus = true; + } + + ImGui::SetItemDefaultFocus(); + if (reclaim_focus) + ImGui::SetKeyboardFocusHere(-1); + ImGui::End(); - moveSceneEntities(); } void ImGuiContext::onPresent(VkCommandBuffer commandBuffer) { diff --git a/KaguEngine/src/ImGuiContext.ixx b/KaguEngine/src/ImGuiContext.ixx index d269119..d0106a5 100644 --- a/KaguEngine/src/ImGuiContext.ixx +++ b/KaguEngine/src/ImGuiContext.ixx @@ -1,6 +1,7 @@ module; // libs +#include #include #include @@ -25,7 +26,8 @@ public: ImGuiContext( Window &window, SwapChain &swapChain, Device &device, std::unique_ptr &pool, - Entity::Map& sceneEntities, std::vector& views, Camera& camera + Entity::Map& sceneEntities, std::vector& views, Camera& camera, + glm::vec4& ambientLight ); ~ImGuiContext(); @@ -35,29 +37,47 @@ public: static void onPresent(VkCommandBuffer commandBuffer); // Specs - [[nodiscard]] float getDepth() const { return m_MaxDepth[m_camIdx]; } - [[nodiscard]] float getFovY() const { return m_FovY[m_camIdx]; } - [[nodiscard]] int getCamIdx() const { return m_camIdx; } + [[nodiscard]] float getDepth() const { return m_MaxDepth[m_CamIdx]; } + [[nodiscard]] float getFovY() const { return glm::radians(m_FovY[m_CamIdx]); } // Radians + [[nodiscard]] float getFovX() const { return glm::radians(m_FovX[m_CamIdx]); } // Radians + [[nodiscard]] Entity& getView() const { return viewsRef[m_CamIdx]; } + [[nodiscard]] int getCamIdx() const { return m_CamIdx; } + [[nodiscard]] glm::vec4& getAmbientLightColor() const { return ambientLightColor; } + [[nodiscard]] bool isRunning() const { return m_IsRunning; } + + // Console + void addLog(const char* msg) { m_Items.emplace_back(msg); } private: - // Setup part + // --- Setup --- + void setupContext() const; static void setupConfigFlags(); static void setupStyle(); static void setAppTheme(); static void setStyleVars(); - void setupContext() const; static void initializeDockspace(const ImGuiID& dockspace_id, const ImGuiViewport* viewport); - // Rendering part + + // --- Main Rendering Flow --- static void beginRender(); void onRender(const Renderer& renderer); - static ImGuiViewport* setupViewport(); - static ImGuiID setDockspaceID(); - static void drawMainMenuBar(); - static void render3DScene(const Renderer& renderer); - void moveSceneEntities() const; - void renderSceneSpecs(); static void endRender(); + // --- UI Panel Rendering --- + static ImGuiViewport* setupViewport(); + ImGuiID getDockspaceID(); + void drawMainMenuBar(); + void render3DScene(const Renderer& renderer) const; + void renderSceneHierarchyPanel(); + void renderPropertiesPanel(); + void renderVisualsPanel(); + void renderConsole(); + + // --- State --- + bool m_IsRunning = true; + Entity::id_t m_SelectedEntityID = std::numeric_limits::max(); + + // --- Lvalue References to Engine State --- + glm::vec4& ambientLightColor; std::unique_ptr &poolRef; std::vector &viewsRef; Entity::Map &entitiesRef; @@ -66,10 +86,16 @@ private: SwapChain &swapChainRef; Window &windowRef; - // Specs + // --- UI/Editor State --- std::vector m_MaxDepth = { 100.f, 100.f }; - std::vector m_FovY = { 50.f, 50.f }; - int m_camIdx = 0; + std::vector m_FovY = { 70.f, 70.f }; + std::vector m_FovX = { 90.f, 90.f }; + int m_CamIdx = 0; + + // --- Console State --- + bool m_ConsoleOpened = true; + char m_InputBuffer[256]; + std::vector m_Items = { "Welcome to Kagu Engine!", "[Info] Still in development!.", "[Hint] Select an entity in the hierarchy to see its properties." }; }; } \ No newline at end of file diff --git a/KaguEngine/src/Renderer.cpp b/KaguEngine/src/Renderer.cpp index 318c6da..71ccbf0 100644 --- a/KaguEngine/src/Renderer.cpp +++ b/KaguEngine/src/Renderer.cpp @@ -158,7 +158,7 @@ void Renderer::createOffscreenResources() { cleanupOffscreenResources(); m_offscreenExtent = m_SwapChain->getSwapChainExtent(); - m_offscreenFormat = VK_FORMAT_B8G8R8A8_SRGB; + m_offscreenFormat = VK_FORMAT_B8G8R8A8_UNORM; // Create color attachment VkImageCreateInfo createInfo{}; @@ -528,7 +528,7 @@ void Renderer::transitionOffscreenImageForImGui() { } } -void Renderer::transitionImageLayout(VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout) { +void Renderer::transitionImageLayout(VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout) const { VkCommandBuffer commandBuffer = deviceRef.beginSingleTimeCommands(); VkImageMemoryBarrier barrier{}; diff --git a/KaguEngine/src/Renderer.ixx b/KaguEngine/src/Renderer.ixx index 6211ef3..aea092d 100644 --- a/KaguEngine/src/Renderer.ixx +++ b/KaguEngine/src/Renderer.ixx @@ -75,7 +75,7 @@ private: VkDescriptorPool m_offscreenDescriptorPool = VK_NULL_HANDLE; VkImageLayout m_offscreenCurrentLayout = VK_IMAGE_LAYOUT_UNDEFINED; VkDescriptorSetLayout m_offscreenDescriptorSetLayout = VK_NULL_HANDLE; - VkFormat m_offscreenFormat = VK_FORMAT_B8G8R8A8_SRGB; + VkFormat m_offscreenFormat = VK_FORMAT_B8G8R8A8_UNORM; VkExtent2D m_offscreenExtent{}; // Multi sampled color image @@ -97,7 +97,7 @@ private: void createOffscreenRenderPass(); void createOffscreenFramebuffer(); void createOffscreenDescriptorSet(); - void transitionImageLayout(VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout); + void transitionImageLayout(VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout) const; }; } // Namespace KaguEngine \ No newline at end of file diff --git a/KaguEngine/src/SwapChain.cpp b/KaguEngine/src/SwapChain.cpp index 1b67177..0f4d603 100644 --- a/KaguEngine/src/SwapChain.cpp +++ b/KaguEngine/src/SwapChain.cpp @@ -433,7 +433,7 @@ void SwapChain::createSyncObjects() { VkSurfaceFormatKHR SwapChain::chooseSwapSurfaceFormat(const std::vector &availableFormats) { for (const auto &availableFormat: availableFormats) { // availableFormat.format == VK_FORMAT_B8G8R8A8_UNORM for ImGui looking right - if (availableFormat.format == VK_FORMAT_B8G8R8A8_SRGB && + if (availableFormat.format == VK_FORMAT_B8G8R8A8_UNORM && availableFormat.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) { return availableFormat; } @@ -446,7 +446,6 @@ VkPresentModeKHR SwapChain::chooseSwapPresentMode(const std::vector