From c59bde138f4f6ead6419598f9516b0c23d281236 Mon Sep 17 00:00:00 2001 From: Ben Hoffman Date: Thu, 31 Oct 2019 19:56:36 -0400 Subject: [PATCH] Linux render fix (#102) * Fix alignment on the point and dir lights on linux * Fix log issue on windows --- Assets/Levels/Level_1.json | 153 ++++++++---------- Assets/Shaders/PBRDefault.frag | 12 +- Assets/Shaders/PBRDefault.vert | 19 +-- Assets/Shaders/PBRDefault_frag.spv | Bin 16068 -> 16100 bytes Assets/Shaders/PBRDefault_vert.spv | Bin 2924 -> 2868 bytes Config/EngineConf.ini | 4 +- .../inc/Lighting/DirectionalLight.hpp | 13 +- .../Graphics/inc/Lighting/PointLight.hpp | 11 +- FlingEngine/Graphics/inc/Renderer.h | 9 +- FlingEngine/Graphics/src/Renderer.cpp | 4 + Sandbox/Gameplay/inc/Mover.h | 9 ++ Sandbox/Gameplay/inc/SandboxGame.h | 3 + Sandbox/Gameplay/src/SandboxGame.cpp | 60 +++++-- 13 files changed, 154 insertions(+), 143 deletions(-) create mode 100644 Sandbox/Gameplay/inc/Mover.h diff --git a/Assets/Levels/Level_1.json b/Assets/Levels/Level_1.json index 8d426e99..75b862e2 100644 --- a/Assets/Levels/Level_1.json +++ b/Assets/Levels/Level_1.json @@ -9,7 +9,7 @@ "value7": 2, "value8": 1, "value9": 0, - "value10": 12, + "value10": 8, "value11": 0, "value12": { "POS_X": -2.0, @@ -62,10 +62,10 @@ "value20": { "POS_X": 0.0, "POS_Y": 0.0, - "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, + "POS_Z": 1.0, + "SCALE_X": 0.10000000149011612, + "SCALE_Y": 0.10000000149011612, + "SCALE_Z": 0.10000000149011612, "ROT_X": 0.0, "ROT_Y": 0.0, "ROT_Z": 0.0 @@ -74,10 +74,10 @@ "value22": { "POS_X": 0.0, "POS_Y": 0.0, - "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, + "POS_Z": -1.0, + "SCALE_X": 0.10000000149011612, + "SCALE_Y": 0.10000000149011612, + "SCALE_Z": 0.10000000149011612, "ROT_X": 0.0, "ROT_Y": 0.0, "ROT_Z": 0.0 @@ -85,11 +85,11 @@ "value23": 6, "value24": { "POS_X": 0.0, - "POS_Y": 0.0, + "POS_Y": 1.0, "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, + "SCALE_X": 0.10000000149011612, + "SCALE_Y": 0.10000000149011612, + "SCALE_Z": 0.10000000149011612, "ROT_X": 0.0, "ROT_Y": 0.0, "ROT_Z": 0.0 @@ -97,83 +97,55 @@ "value25": 7, "value26": { "POS_X": 0.0, - "POS_Y": 0.0, + "POS_Y": -1.0, "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, + "SCALE_X": 0.10000000149011612, + "SCALE_Y": 0.10000000149011612, + "SCALE_Z": 0.10000000149011612, "ROT_X": 0.0, "ROT_Y": 0.0, "ROT_Z": 0.0 }, - "value27": 4, - "value28": { - "POS_X": 0.0, - "POS_Y": 0.0, - "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, - "ROT_X": 0.0, - "ROT_Y": 0.0, - "ROT_Z": 0.0 + "value27": 8, + "value28": 0, + "value29": { + "MESH_NAME": "Models/sphere.obj", + "MATERIAL_NAME": "Materials/Cobblestone.mat" }, - "value29": 5, - "value30": { - "POS_X": 0.0, - "POS_Y": 0.0, - "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, - "ROT_X": 0.0, - "ROT_Y": 0.0, - "ROT_Z": 0.0 + "value30": 1, + "value31": { + "MESH_NAME": "Models/sphere.obj", + "MATERIAL_NAME": "Materials/Paint.mat" }, - "value31": 6, - "value32": { - "POS_X": 0.0, - "POS_Y": 0.0, - "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, - "ROT_X": 0.0, - "ROT_Y": 0.0, - "ROT_Z": 0.0 + "value32": 2, + "value33": { + "MESH_NAME": "Models/sphere.obj", + "MATERIAL_NAME": "Materials/Bronze.mat" }, - "value33": 7, - "value34": { - "POS_X": 0.0, - "POS_Y": 0.0, - "POS_Z": 0.0, - "SCALE_X": 1.0, - "SCALE_Y": 1.0, - "SCALE_Z": 1.0, - "ROT_X": 0.0, - "ROT_Y": 0.0, - "ROT_Z": 0.0 + "value34": 3, + "value35": { + "MESH_NAME": "Models/sphere.obj", + "MATERIAL_NAME": "Materials/Cobblestone.mat" }, - "value35": 4, - "value36": 0, + "value36": 4, "value37": { "MESH_NAME": "Models/sphere.obj", - "MATERIAL_NAME": "Materials/Cobblestone.mat" + "MATERIAL_NAME": "Materials/Default.mat" }, - "value38": 1, + "value38": 5, "value39": { "MESH_NAME": "Models/sphere.obj", - "MATERIAL_NAME": "Materials/Paint.mat" + "MATERIAL_NAME": "Materials/Default.mat" }, - "value40": 2, + "value40": 6, "value41": { "MESH_NAME": "Models/sphere.obj", - "MATERIAL_NAME": "Materials/Bronze.mat" + "MATERIAL_NAME": "Materials/Default.mat" }, - "value42": 3, + "value42": 7, "value43": { "MESH_NAME": "Models/sphere.obj", - "MATERIAL_NAME": "Materials/Cobblestone.mat" + "MATERIAL_NAME": "Materials/Default.mat" }, "value44": 1, "value45": 8, @@ -181,6 +153,7 @@ "DIFFUSE_X": 1.0, "DIFFUSE_Y": 1.0, "DIFFUSE_Z": 1.0, + "DIFFUSE_W": 1.0, "DIRECTION_X": 1.0, "DIRECTION_Y": -1.0, "DIRECTION_Z": -0.5, @@ -189,35 +162,35 @@ "value47": 4, "value48": 4, "value49": { - "DIFFUSE_X": 0.6554765701293945, - "DIFFUSE_Y": 0.25879696011543276, - "DIFFUSE_Z": 0.0029908139258623125, - "RANGE": 30.0, - "INTENSITY": 10.0 + "DIFFUSE_X": 1.0, + "DIFFUSE_Y": 0.0, + "DIFFUSE_Z": 0.0, + "RANGE": 20.0, + "INTENSITY": 5.0 }, "value50": 5, "value51": { - "DIFFUSE_X": 0.6264839768409729, - "DIFFUSE_Y": 0.5919064879417419, - "DIFFUSE_Z": 0.40885648131370547, - "RANGE": 30.0, - "INTENSITY": 10.0 + "DIFFUSE_X": 1.0, + "DIFFUSE_Y": 1.0, + "DIFFUSE_Z": 0.0, + "RANGE": 20.0, + "INTENSITY": 5.0 }, "value52": 6, "value53": { - "DIFFUSE_X": 0.05688650161027908, - "DIFFUSE_Y": 0.42460402846336367, - "DIFFUSE_Z": 0.1903134286403656, - "RANGE": 30.0, - "INTENSITY": 10.0 + "DIFFUSE_X": 0.0, + "DIFFUSE_Y": 1.0, + "DIFFUSE_Z": 1.0, + "RANGE": 20.0, + "INTENSITY": 5.0 }, "value54": 7, "value55": { - "DIFFUSE_X": 0.5340433716773987, - "DIFFUSE_Y": 0.6538285613059998, - "DIFFUSE_Z": 0.3674733638763428, - "RANGE": 30.0, - "INTENSITY": 10.0 + "DIFFUSE_X": 1.0, + "DIFFUSE_Y": 0.0, + "DIFFUSE_Z": 1.0, + "RANGE": 20.0, + "INTENSITY": 5.0 }, "value56": 0 } \ No newline at end of file diff --git a/Assets/Shaders/PBRDefault.frag b/Assets/Shaders/PBRDefault.frag index 76b93c4e..c8b44c5a 100644 --- a/Assets/Shaders/PBRDefault.frag +++ b/Assets/Shaders/PBRDefault.frag @@ -33,10 +33,10 @@ layout (binding = 5) uniform sampler2D roughnessMap; layout (binding = 6) uniform LightingData { - int DirLightCount; - DirectionalLightData DirLights[32]; + uint DirLightCount; + uint PointLightCount; - int PointLightCount; + DirectionalLightData DirLights[32]; PointLightData PointLights[32]; } lights; @@ -47,7 +47,6 @@ layout (location = 0) in vec3 inWorldPos; layout (location = 1) in vec2 inTexCoord; layout (location = 2) in vec3 inTangent; layout (location = 3) in vec3 inNormal; -layout (location = 4) in vec3 inCamPos; // Outputs ------------ layout (location = 0) out vec4 outFragColor; @@ -209,7 +208,7 @@ void main() lights.DirLights[i], normal, inWorldPos, - inCamPos.xyz, + ubo.camPos.xyz, roughness, metal, abledoColor.rgb, @@ -218,13 +217,14 @@ void main() } + for(int i = 0; i < lights.PointLightCount; i++) { LightColor += CalculatePointLight( lights.PointLights[ i ], normal, inWorldPos, - inCamPos.xyz, + ubo.camPos.xyz, roughness, metal, abledoColor.rgb, diff --git a/Assets/Shaders/PBRDefault.vert b/Assets/Shaders/PBRDefault.vert index 4174caec..221af022 100644 --- a/Assets/Shaders/PBRDefault.vert +++ b/Assets/Shaders/PBRDefault.vert @@ -23,7 +23,6 @@ layout (location = 0) out vec3 outWorldPos; layout (location = 1) out vec2 outTextCoord; // AKA UV coordinate layout (location = 2) out vec3 outTangent; layout (location = 3) out vec3 outNormal; -layout (location = 4) out vec3 outCamPos; out gl_PerVertex { @@ -39,22 +38,6 @@ void main() outTextCoord.t = 1.0 - inTexCoord.t; gl_Position = ubo.projection * ubo.view * vec4(outWorldPos, 1.0); - - // How I was doing it before - // mat4 modelView = ubo.view * ubo.model; - // vec3 worldPos = vec3(modelView * vec4(inPosition, 1.0)); - // gl_Position = ubo.projection * modelView * vec4(inPosition, 1.0); - - // // World Pos ------ - // outWorldPos = worldPos; - // // Tangent ----- + // Tangent ----- outTangent = normalize( inTangent * mat3(ubo.model) ); - // // Normal ----- - // //outNormal = normalize( inNormal * mat3(ubo.model) ); - // outNormal = inNormal; - // // Texture Coord ----- - // outTextCoord = inTexCoord; - // // Subtract 1 from the texture coordinate if we need to for each texture - // outTextCoord.y = 1 - outTextCoord.y; - // outCamPos = ubo.camPos; } \ No newline at end of file diff --git a/Assets/Shaders/PBRDefault_frag.spv b/Assets/Shaders/PBRDefault_frag.spv index 16915de1cb210f88d7d10acd127fd71c5cdeae28..b8d768be8ed24d88054bf0ba6cd3990fdc18024a 100644 GIT binary patch delta 3781 zcmZve+iz4=6vp>VI|H;7iiHksX=y1S3d%(h5zDQWi%@8*nD{tgQ-^dqFdZ}y$-yUm z;la$KPyPc&!UGA>!~|b>6O9@ZK`SU1Z+JsMynMesd)3p4CtaNNee1H<*?XVN~^8H=_)*93a)XD!nqK;V2Z8QEvv#0R^b&%7fo4wWtGF~D*Q+leryU(yB^_@ zY(AguEfkB|G}Wb#O8c%V94T!pW=E_&JU^JsI5(cn9~vDlZXN2|wtL^R1f<+h`K^X? zYP(ajn%2{H97MOIQL;mJYel$D$#(7BS8_^AUnRk3g6Mv0!FaT_p+$RdMb{`2Zn1=n zUsq+kOvcFC5Kj)6Xlp+>s}asJHmb1gLgq(ynsSl+c?@?+=Nop&P6P6!B&-o|`OK__ z$ZQ(zuwKQVkhnjXnl?);2V8ZW&TUE@n79)Xi-QYs(Ijaf_zDj)WsL)*o- z!v%@_4zi0R`B4TE;>03gHpmwFIp}-_{{IAQ@$GWNmk(MlJDt-jV&&Ou8&?S7*Cz~D zkqwnZPmAE>sFa1l>^vNJR0-K>9`I4&p>nqQ&BV=ed!{X#F8-c47QhbvJBDWqbFrBn z%*AFHe=fE-=3+DaiE?qV8D1-YF1LUqzaY1pIgpUsEsk}&O=1e*ax*)a%gr$HTyAm9 z?HVn1)t~1teHmLI4d1#zt{9(%%(_jphTJEhYV2u+fNMZ0z1N>1Sly zOIuO#bP?x^t3q~F&2bG^yJV9^!W z=19lJ`Q z&j5h$lTZK!q1%FO(pitO;L7Vrs#92i&cKKxci=*A{IAD5h2ePUD(0d~n5)F*0*s%{ z#Ukm%DBWaCw=glbyWNohjy4yIr4yt-AH-ZN5g^Fs0*s%BUs z#*YuAAs&#7yP$Xy7wS$ar%^(;Ls4xU`xm0)r)ORJ>YEOBpw&9;W~ zw_)NE72%Bx)1%V;FojuKD-4J5u&t;p%7u&FK46`6n&+i9f8Ajz@;lcOm+&9fB+oWDE`}nx9{4GF0n-Y(&2cF+Y`9>f_npp>wrFk bJsA)neowMV_b-Y_7TqO%;B-&dYwiC6V?3eL delta 3780 zcmZve%X3sk6vlgIGLtY#NN@r}5(s%9s30#LAtH~M2vJFhR_V^g1XDOvl7VERB~{eL zmAY_Y-K8u31S$)wEEiJX!i^Ub=of|$oHoq)3=MSaV z>F-3ky>(6+{oFudYV1gzd~Luh z`A8-eFY{rh#Vn^aTaCM{K;tB>AW8jW2MUw@Tk;cRtA^2cB9G^%@)IGxUWFI@T*E%k zY3`_1VhK*Tv~VGeuyTp6#&uQUo+^BM72a5d?~J=GOD5k`Ww2!lPPv@l*O>J<>*7r5 zz*PQde{sAxWea{p{1c99RW5Hf0RSJjXIWt<+lqomlpJ>d+hW(ct&#$EXXg!s|4a#E9&o9sP zqG38To$3b_^9yk)$=lSiEdP&p8ShxxKc^VzNsk!o)rs+CRSYZ0Xa<*v5tOQB(5z{h z5o?RsDej;U9Ck#f?7Ah>40lN;YcOTlA(_hx=Agi|L18{XUKPgfd5s*qeh$0uCE!DH;8guF zvE3rJzHxQ$W+B%8fG}L8>tt|zP((sXR>eeM>IrVO@WYbPaUvZG!%4tdCor8@kBZkX zupt(h(}Dw!D>+Vww!2OQs~YxuSH0%(h!O^~I*mM{QM^!vZ$@yF?Ek95|3onH$RQdp z5y2mF80iR+lRa;6)PXlRihHUsZ?Ne}h&MQj^#Yu5@-;~WYzqPI1`$p&^^*)sWW%GkNkuE9% zI-*fVKdPg9Owl;;pF&Qee3R~djX#UysK{ckY6Og(`TQc8IQp57=YAE!i3xE6V~7)V z`kQ2&v;lz=+xNRLK1p?az}S&2yYz?T4?-Qa0yf-i zNaSzHZ-zPw3T(Q6C7%y<6c-pBI~7yruL~bm>5^Pr7>@4zx7(Y7uRpA1Q6u@CFdC%@ z?sW};cT(~WIkJ3~M(L9&88I{agpb8aNxmrl1#Ks@*9yZChgC}F1>_BRek#L-a3la_ zR3}3UD|KrgA6O9Dt+E5JW>LnAK@w#F+YFw_)S12%O3Jn--@@B~d zu{vKNnd;==&E__7@K)y;$@sxj=iml)CL{r5^KFrw_VkDH=atN=GeMg=N(^~5SBE+) zFb{*3KNvgnX_t(T!rk&&BkbX1+X;c8mH%4FIO!KSQT`nQ_*nUau`{1_ zlJVh{COLdMh4Eow91R#dEl}q#gKh!4GdyQtR*!DIR(O$o>Q2Z541vsrTV&fF~wx7k0}p7D4cVJwBMlI_0mP=f8gY?C~o zh^(Dukv?gX4zm&qAB(kJa`e9J5QZbpt@{E=O;f*=6e9t+ANNS6WbMA(D;drX7#&>n zPEeYbz8O{PdBpHro+<}mb kPIxfnFdfk{*pxv5{13$SZNy+$B$M__9-Muu>&3PI0R-ZiBLDyZ diff --git a/Assets/Shaders/PBRDefault_vert.spv b/Assets/Shaders/PBRDefault_vert.spv index 1a4d1905fb4875a372829594b5923477bc1636ba..05e8ec9d839eb229ad601170d20b8f77f1e4853d 100644 GIT binary patch delta 45 zcmaDOwndDWnMs+Qfq{{Moq>ZPaU!oNBmYEa%Z&{O7&nJ7tzq0Oz>>kVxr6Nq3jp5N B3v2)Y delta 95 zcmdlY_C}1CnMs+Qfq{{Moq>ZPX(F#FqrgOGOUA^Fm4_LHSs7Rv5*Zj6@=Hsc6LSOd riy0U;TQjX? void serialize(Archive & t_Archive); diff --git a/FlingEngine/Graphics/inc/Renderer.h b/FlingEngine/Graphics/inc/Renderer.h index fc78089a..4adb02d0 100644 --- a/FlingEngine/Graphics/inc/Renderer.h +++ b/FlingEngine/Graphics/inc/Renderer.h @@ -290,11 +290,12 @@ namespace Fling std::shared_ptr m_BRDFLookupTexture; struct LightingUbo { - UINT32 DirLightCount = 0; - DirectionalLight DirLightBuffer[Lighting::MaxDirectionalLights] = {}; + alignas(4) UINT32 DirLightCount = 0; + alignas(4) UINT32 PointLightCount = 0; - UINT32 PointLightCount = 0; - PointLight PointLightBuffer[Lighting::MaxPointLights] = {}; + alignas(16) DirectionalLight DirLightBuffer[Lighting::MaxDirectionalLights] = {}; + + alignas(16) PointLight PointLightBuffer[Lighting::MaxPointLights] = {}; }; LightingUbo m_LightingUBO = {}; diff --git a/FlingEngine/Graphics/src/Renderer.cpp b/FlingEngine/Graphics/src/Renderer.cpp index e2f6b8cf..ddb64b86 100644 --- a/FlingEngine/Graphics/src/Renderer.cpp +++ b/FlingEngine/Graphics/src/Renderer.cpp @@ -125,6 +125,10 @@ namespace Fling const std::vector& Images = m_SwapChain->GetImages(); VkDeviceSize bufferSize = sizeof(m_LightingUBO); + F_LOG_TRACE("Sizeof DirLight : {} , alignof {}", sizeof(DirectionalLight), alignof(DirectionalLight)); + F_LOG_TRACE("Sizeof PointLight : {} , alignof {}", sizeof(PointLight), alignof(PointLight)); + F_LOG_TRACE("Light UBO : {} , alignof {}", sizeof(LightingUbo), alignof(LightingUbo)); + m_Lighting.m_LightingUBOs.resize(Images.size()); for (size_t i = 0; i < Images.size(); i++) { diff --git a/Sandbox/Gameplay/inc/Mover.h b/Sandbox/Gameplay/inc/Mover.h new file mode 100644 index 00000000..6d4a728d --- /dev/null +++ b/Sandbox/Gameplay/inc/Mover.h @@ -0,0 +1,9 @@ +#pragma once + +/** A mover will move between two values ata given speed */ +struct Mover +{ + float MinPos = -4.0f; + float MaxPos = 4.0f; + float Speed = 1.0f; +}; \ No newline at end of file diff --git a/Sandbox/Gameplay/inc/SandboxGame.h b/Sandbox/Gameplay/inc/SandboxGame.h index b841075d..96d77ab9 100644 --- a/Sandbox/Gameplay/inc/SandboxGame.h +++ b/Sandbox/Gameplay/inc/SandboxGame.h @@ -53,11 +53,14 @@ namespace Sandbox private: bool m_DoRotations = false; + bool m_MovePointLights = false; void ToggleRotation(); void OnLeftArrowPressed(); + void OnToggleMoveLights(); + void OnRightArrowPressed(); /** Temp vector for keeping track of the movement of things */ diff --git a/Sandbox/Gameplay/src/SandboxGame.cpp b/Sandbox/Gameplay/src/SandboxGame.cpp index caf84b6b..c2b1e2ca 100644 --- a/Sandbox/Gameplay/src/SandboxGame.cpp +++ b/Sandbox/Gameplay/src/SandboxGame.cpp @@ -10,6 +10,8 @@ #include "Lighting/PointLight.hpp" #include "Random.h" +#include "Mover.h" + namespace Sandbox { using namespace Fling; @@ -32,6 +34,7 @@ namespace Sandbox // Toggle model rotation in Update Input::BindKeyPress<&Sandbox::Game::ToggleRotation>(KeyNames::FL_KEY_T, *this); + Input::BindKeyPress<&Sandbox::Game::OnToggleMoveLights>(KeyNames::FL_KEY_SPACE, *this); LightingTest(t_Reg); //OnLoadInitated(); @@ -45,7 +48,6 @@ namespace Sandbox void Game::Update(entt::registry& t_Reg, float DeltaTime) { - static float PosSpeed = 0.5f; if (m_DoRotations) { glm::vec3 RotOffset(0.0f, 15.0f * DeltaTime, 0.0f); @@ -57,6 +59,21 @@ namespace Sandbox t_Trans.SetRotation(curRot + RotOffset); }); } + + if(m_MovePointLights) + { + t_Reg.view().each([&](Mover& t_Mover, Transform& t_Trans) + { + glm::vec3 newPos = t_Trans.GetPos(); + if(newPos.x <= t_Mover.MinPos || newPos.x >= t_Mover.MaxPos) + { + t_Mover.Speed *= -1.0f; + } + + newPos.x += t_Mover.Speed * DeltaTime; + t_Trans.SetPos(newPos); + }); + } } void Game::OnLoadInitated() @@ -112,6 +129,20 @@ namespace Sandbox t0.SetPos(Fling::Random::GetRandomVec3(glm::vec3(-5.0f), glm::vec3(5.0f))); }; + auto AddPointLight = [&](glm::vec3 t_Pos, glm::vec3 t_Color) + { + entt::entity e0 = t_Reg.create(); + PointLight& Light = t_Reg.assign(e0); + Transform& t0 = t_Reg.get(e0); + Mover& m0 = t_Reg.assign(e0); + + Light.DiffuseColor = glm::vec4(t_Color, 1.0f); + Light.Intensity = 5.0f; + Light.Range = 3.0f; + + t0.SetPos(t_Pos); + }; + //AddSphere(0, "Models/Cerberus.obj", "Materials/Cerberus.mat"); AddSphere(0, "Models/sphere.obj", "Materials/Cobblestone.mat"); @@ -119,17 +150,23 @@ namespace Sandbox AddSphere(2, "Models/sphere.obj", "Materials/Bronze.mat"); AddSphere(3, "Models/sphere.obj", "Materials/Cobblestone.mat"); - // Add a point light - AddRandomPointLight(); - AddRandomPointLight(); - AddRandomPointLight(); - AddRandomPointLight(); + AddPointLight(glm::vec3(+0.0f, +0.0f, +1.0f), glm::vec3(1.0f, 0.0f, 0.0f)); + AddPointLight(glm::vec3(+0.0f, +0.0f, -1.0f), glm::vec3(1.0f, 1.0f, 0.0f)); - // Directional Lights + AddPointLight(glm::vec3(+0.0f, +1.0f, +0.0f), glm::vec3(0.0f, 1.0f, 1.0f)); + AddPointLight(glm::vec3(+0.0f, -1.0f, +0.0f), glm::vec3(1.0f, 0.0f, 1.0f)); + + + auto AddDirLight = [&](glm::vec3 t_Dir, glm::vec3 t_Color) { entt::entity e0 = t_Reg.create(); DirectionalLight& Light = t_Reg.assign(e0); - } + Light.Direction = glm::vec4(t_Dir, 1.0f); + Light.DiffuseColor = glm::vec4(t_Color, 1.0f); + }; + + // Directional Lights + //AddDirLight(glm::vec3(+1.0f, -1.0f, -0.5f), glm::vec3(1.0f, 1.0f, 1.0f)); } void Game::GenerateTestMeshes(entt::registry& t_Reg) @@ -168,10 +205,15 @@ namespace Sandbox FlingWindow* CurrentWindow = Renderer::Get().GetCurrentWindow(); if(CurrentWindow) { - CurrentWindow->SetMouseVisible(!CurrentWindow->GetMouseVisible()); + CurrentWindow->SetMouseVisible(!CurrentWindow->GetMouseVisible()); } } + void Game::OnToggleMoveLights() + { + m_MovePointLights = !m_MovePointLights; + } + void Game::ToggleRotation() { m_DoRotations = !m_DoRotations;