From 5432f2e6f16a9dcf7ab3cc39b6ee180d5d7ca9c8 Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Fri, 18 Apr 2025 23:28:46 -0500 Subject: [PATCH] Added Clustering --- imgui.ini | 10 ++-- remake/build.log | 97 +--------------------------------- src/assets/shaders/sprite.frag | 44 ++++++++------- src/src/Engine.cpp | 68 +++++++++++++++++++++--- src/src/Renderer.cpp | 63 ++++++++++++++++++++-- src/src/Renderer.h | 31 +++++++---- src/src/utils/utils.h | 26 +++++++++ 7 files changed, 199 insertions(+), 140 deletions(-) diff --git a/imgui.ini b/imgui.ini index d13de6b..0f93657 100644 --- a/imgui.ini +++ b/imgui.ini @@ -14,14 +14,14 @@ Size=1920,1158 Collapsed=0 [Window][Inspector] -Pos=0,358 -Size=385,819 +Pos=0,644 +Size=385,533 Collapsed=0 DockId=0x0000000A,0 [Window][Scene Tree] Pos=0,19 -Size=385,337 +Size=385,623 Collapsed=0 DockId=0x00000009,0 @@ -86,8 +86,8 @@ DockId=0x00000004,0 [Docking][Data] DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X DockNode ID=0x00000001 Parent=0x11111111 SizeRef=385,701 Split=Y Selected=0x12EF0F59 - DockNode ID=0x00000009 Parent=0x00000001 SizeRef=385,337 HiddenTabBar=1 Selected=0x12EF0F59 - DockNode ID=0x0000000A Parent=0x00000001 SizeRef=385,819 HiddenTabBar=1 Selected=0x36DC96AB + DockNode ID=0x00000009 Parent=0x00000001 SizeRef=385,623 HiddenTabBar=1 Selected=0x12EF0F59 + DockNode ID=0x0000000A Parent=0x00000001 SizeRef=385,533 HiddenTabBar=1 Selected=0x36DC96AB DockNode ID=0x00000002 Parent=0x11111111 SizeRef=1533,701 Split=Y Selected=0xC450F867 DockNode ID=0x00000007 Parent=0x00000002 SizeRef=606,675 CentralNode=1 HiddenTabBar=1 Selected=0xC450F867 DockNode ID=0x00000008 Parent=0x00000002 SizeRef=606,481 Split=X Selected=0x9B5D3198 diff --git a/remake/build.log b/remake/build.log index 5e624f6..8af518a 100644 --- a/remake/build.log +++ b/remake/build.log @@ -1,97 +1,2 @@ -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lctype.c -o src\build\lctype.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lcorolib.c -o src\build\lcorolib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lbaselib.c -o src\build\lbaselib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lauxlib.c -o src\build\lauxlib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lapi.c -o src\build\lapi.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldblib.c -o src\build\ldblib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lcode.c -o src\build\lcode.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldump.c -o src\build\ldump.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldebug.c -o src\build\ldebug.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lfunc.c -o src\build\lfunc.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldo.c -o src\build\ldo.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\linit.c -o src\build\linit.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lgc.c -o src\build\lgc.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lmem.c -o src\build\lmem.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\liolib.c -o src\build\liolib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\llex.c -o src\build\llex.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lmathlib.c -o src\build\lmathlib.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\main.cpp -o src\build\main.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\ExceptionHandler.cpp -o src\build\utils\ExceptionHandler.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lopcodes.c -o src\build\lopcodes.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lobject.c -o src\build\lobject.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\loslib.c -o src\build\loslib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lstate.c -o src\build\lstate.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lstring.c -o src\build\lstring.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\UID.cpp -o src\build\utils\UID.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lparser.c -o src\build\lparser.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ltable.c -o src\build\ltable.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ltablib.c -o src\build\ltablib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lstrlib.c -o src\build\lstrlib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lzio.c -o src\build\lzio.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ltm.c -o src\build\ltm.o -tf8lib.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\luac.c -o src\build\luac.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lundump.c -o src\build\lundump.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lvm.c -o src\build\lvm.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\loadlib.c -o src\build\loadlib.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\GameObjectsList.cpp -o src\build\utils\GameObjectsList.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Shader.cpp -o src\build\utils\Shader.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\TextComonent.cpp -o src\build\Components\TextComonent.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\PhysicsComponent.cpp -o src\build\Components\PhysicsComponent.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\arena_allocator.c -o src\build\arena_allocator.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Profiler.cpp -o src\build\utils\Profiler.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lua.c -o src\build\lua.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\aabb.c -o src\build\aabb.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\array.c -o src\build\array.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\bitset.c -o src\build\bitset.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\body.c -o src\build\body.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\broad_phase.c -o src\build\broad_phase.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\contact.c -o src\build\contact.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\constraint_graph.c -o src\build\constraint_graph.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\core.c -o src\build\core.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\distance_joint.c -o src\build\distance_joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\geometry.c -o src\build\geometry.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\id_pool.c -o src\build\id_pool.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\contact_solver.c -o src\build\contact_solver.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\hull.c -o src\build\hull.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\distance.c -o src\build\distance.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\dynamic_tree.c -o src\build\dynamic_tree.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\math_functions.c -o src\build\math_functions.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\TilemapComponent.cpp -o src\build\Components\TilemapComponent.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\FileDialog.cpp -o src\build\utils\FileDialog.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\motor_joint.c -o src\build\motor_joint.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Renderer.cpp -o src\build\Renderer.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\island.c -o src\build\island.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_impl_opengl3.cpp -o src\build\imgui_impl_opengl3.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\mover.c -o src\build\mover.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_impl_glfw.cpp -o src\build\imgui_impl_glfw.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\mouse_joint.c -o src\build\mouse_joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\joint.c -o src\build\joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\manifold.c -o src\build\manifold.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\CameraComponent.cpp -o src\build\Components\CameraComponent.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\sensor.c -o src\build\sensor.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\LightComponent.cpp -o src\build\Components\LightComponent.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\prismatic_joint.c -o src\build\prismatic_joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\revolute_joint.c -o src\build\revolute_joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\types.c -o src\build\types.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\timer.c -o src\build\timer.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\table.c -o src\build\table.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Logging.cpp -o src\build\utils\Logging.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\wheel_joint.c -o src\build\wheel_joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\weld_joint.c -o src\build\weld_joint.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\solver_set.c -o src\build\solver_set.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\shape.c -o src\build\shape.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\solver.c -o src\build\solver.o -[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\world.c -o src\build\world.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\utils.cpp -o src\build\utils\utils.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\ScriptComponent.cpp -o src\build\Components\ScriptComponent.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_tables.cpp -o src\build\imgui_tables.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_demo.cpp -o src\build\imgui_demo.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_draw.cpp -o src\build\imgui_draw.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\SpriteComponent.cpp -o src\build\Components\SpriteComponent.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Entitys\Object.cpp -o src\build\Entitys\Object.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\EngineConfig.cpp -o src\build\utils\EngineConfig.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_widgets.cpp -o src\build\imgui_widgets.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui.cpp -o src\build\imgui.o +[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o [LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\Entitys\Object.o src\build\utils\EngineConfig.o src\build\utils\ExceptionHandler.o src\build\utils\FileDialog.o src\build\utils\GameObjectsList.o src\build\utils\Logging.o src\build\utils\Profiler.o src\build\utils\Shader.o src\build\utils\UID.o src\build\utils\utils.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto diff --git a/src/assets/shaders/sprite.frag b/src/assets/shaders/sprite.frag index 8ce3527..457cc98 100644 --- a/src/assets/shaders/sprite.frag +++ b/src/assets/shaders/sprite.frag @@ -1,4 +1,4 @@ -#version 330 core +#version 430 core in vec2 vUV; in vec2 vFragScreenPos; @@ -6,25 +6,31 @@ out vec4 FragColor; uniform sampler2D uTex; uniform sampler2D uNormalMap; -uniform float uRotation; +uniform float uRotation; uniform float uBrightness; uniform float uSaturation; uniform float uGamma; -#define MAX_LIGHTS 512 +uniform int uLightCount; +uniform int uClusterWidth; +uniform int uClusterHeight; +uniform int uClusterCols; +uniform int uMaxLightsPerCluster; -uniform int uLightCount; +#define MAX_LIGHTS 512 uniform vec2 uLightPos[MAX_LIGHTS]; uniform vec3 uLightColor[MAX_LIGHTS]; uniform float uLightIntensity[MAX_LIGHTS]; uniform float uLightRadius[MAX_LIGHTS]; +layout(std430, binding = 1) readonly buffer ClusterLightBuffer { + int clusterLightIndices[]; +}; + void main() { - // Rotate UV 90° clockwise vec2 rotatedUV = vec2(vUV.y, 1.0 - vUV.x); - vec4 texColor = texture(uTex, rotatedUV); if (texColor.a < 0.1) discard; @@ -40,18 +46,23 @@ void main() vec3 normal = normalize(n); vec3 finalLight = vec3(0.0); - for (int i = 0; i < uLightCount; ++i) - { - vec2 lightVec = uLightPos[i] - vFragScreenPos; - float dist = length(lightVec); + int cx = int(vFragScreenPos.x) / uClusterWidth; + int cy = int(vFragScreenPos.y) / uClusterHeight; + int clusterIndex = cy * uClusterCols + cx; - if (dist < uLightRadius[i]) - { + for (int i = 0; i < uMaxLightsPerCluster; ++i) { + int lightIndex = clusterLightIndices[clusterIndex * uMaxLightsPerCluster + i]; + if (lightIndex < 0 || lightIndex >= uLightCount) + break; + + vec2 lightVec = uLightPos[lightIndex] - vFragScreenPos; + float dist = length(lightVec); + if (dist < uLightRadius[lightIndex]) { vec2 lightDir2D = normalize(lightVec); vec3 lightDir = normalize(vec3(lightDir2D, 1.0)); - float attenuation = smoothstep(uLightRadius[i], 0.0, dist); + float attenuation = smoothstep(uLightRadius[lightIndex], 0.0, dist); float diff = max(dot(normal, lightDir), 0.0); - vec3 light = uLightColor[i] * diff * attenuation * uLightIntensity[i]; + vec3 light = uLightColor[lightIndex] * diff * attenuation * uLightIntensity[lightIndex]; finalLight += light; } } @@ -64,8 +75,5 @@ void main() result = mix(vec3(gray), result, uSaturation); result = pow(result, vec3(1.0 / uGamma)); - - result = clamp(result, 0.0, 1.0); - - FragColor = vec4(result, texColor.a); + FragColor = vec4(clamp(result, 0.0, 1.0), texColor.a); } diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp index 07b32de..65626d8 100644 --- a/src/src/Engine.cpp +++ b/src/src/Engine.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -96,7 +97,7 @@ void DrawProfilerTimelineBars(const ProfileNode &node, // draw the bar size_t hash = std::hash{}(node.name); ImU32 color = ImColor::HSV(((hash ^ SEED) % 1000) / 1000.0f, 0.6f, 0.85f); - + ImDrawList *draw = ImGui::GetWindowDrawList(); draw->AddRectFilled(barMin, barMax, color, 3.0f); draw->AddRect(barMin, barMax, IM_COL32_BLACK, 3.0f); @@ -352,10 +353,57 @@ void Engine::Init() Renderer::Init(); - auto obj = std::make_shared("Hello, Create"); + // auto obj = std::make_shared("Hello, Create"); + // + // objects.push_back(obj); + // selected = obj; + + { + std::random_device rd; + std::mt19937 rng(rd()); + std::uniform_real_distribution lightRadius(1000.0f, 2000.0f); + std::uniform_real_distribution lightIntensity(1.0f, 3.0f); + std::uniform_real_distribution hueDist(0.0f, 1.0f); + + const float tileSize = 1024.0f; // approximate texture size + const int gridSize = 10; + + // 10x10 grid of pebble sprites + for (int y = 0; y < gridSize; ++y) + { + for (int x = 0; x < gridSize; ++x) + { + int index = y * gridSize + x; + auto obj = std::make_shared("Pebble_" + std::to_string(index)); + obj->SetLocalPosition(glm::vec2(x * tileSize, y * tileSize)); + + auto sprite = obj->AddComponent(); + sprite->SetTexture("C:/Users/spenc/OneDrive/Pictures/textures/ganges_river_pebbles_diff_1k.png"); + sprite->SetNormalMap("C:/Users/spenc/OneDrive/Pictures/textures/ganges_river_pebbles_nor_gl_1k.png"); + sprite->SetRenderType(SpriteComponent::RenderType::Lit); + + objects.push_back(obj); + } + } + + // 100 random lights + std::uniform_real_distribution posDist(0.0f, tileSize * gridSize); + + for (int i = 0; i < 100; ++i) + { + auto obj = std::make_shared("Light_" + std::to_string(i)); + obj->SetLocalPosition(glm::vec2(posDist(rng), posDist(rng))); + + auto light = obj->AddComponent(); + light->SetRadius(lightRadius(rng)); + light->SetIntensity(lightIntensity(rng)); + light->SetColor(HSVtoRGB(hueDist(rng), 0.8f, 1.0f)); + + objects.push_back(obj); + } + } + - objects.push_back(obj); - selected = obj; Logger::LogVerbose("Resverving Objects"); m_toDraw.reserve(1024); @@ -618,6 +666,8 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom m_activeCamera = nullptr; m_physicsUpdates.clear(); + const glm::vec2 screenSize = glm::vec2(Renderer::GetSize()); + for (auto &root : objects) if (!root->GetParent()) m_collectStack.push_back(root); @@ -635,7 +685,7 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom if (auto light = obj->GetComponent()) { glm::vec2 world = obj->GetWorldPosition(); - glm::vec2 screen = (world - camPos) * camZoom + glm::vec2(Renderer::GetSize()) * 0.5f; + glm::vec2 screen = (world - camPos) * camZoom + screenSize * 0.5f; Renderer::AddLight(screen, light->GetColor(), light->GetIntensity(), light->GetRadius() * camZoom); } @@ -647,7 +697,6 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom m_activeCamera = camera; } } - if (playing) { @@ -663,7 +712,6 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom } } - void Engine::Run() { while (!glfwWindowShouldClose(window)) @@ -777,7 +825,6 @@ void Engine::Run() { ImGui::Checkbox("Profile Engine", &g_engineConfig.settings.profile_editor); ImGui::Checkbox("Deep Profileing", &g_engineConfig.settings.profile_deep); - } ImGui::EndMenu(); } @@ -952,6 +999,11 @@ void Engine::Run() collectObjects(playing, cameraPos, cameraZoom); profiler.EndEngineSection(); + profiler.BeginEngineSection("Renderer::UpdateClusterLights"); + + Renderer::UpdateClusterLights(); + profiler.EndEngineSection(); + // Sort Objects profiler.BeginEngineSection("Sort Objects"); if (m_toDraw.size() > 1) diff --git a/src/src/Renderer.cpp b/src/src/Renderer.cpp index e10adf6..2060e93 100644 --- a/src/src/Renderer.cpp +++ b/src/src/Renderer.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include static Shader spriteShader; @@ -31,6 +32,11 @@ std::unique_ptr Renderer::s_ColorCorrection = nullptr; std::vector Renderer::s_Lights; +std::vector Renderer::s_Clusters; +GLuint Renderer::s_ClusterSSBO = 0; +int Renderer::s_ClusterCols = 0; +int Renderer::s_ClusterRows = 0; + static Shader tilemapShader; void Renderer::InitQuad() @@ -89,6 +95,8 @@ void Renderer::Init() SetColorCorrection(std::make_unique()); + glGenBuffers(1, &s_ClusterSSBO); + // Create a 1x1 flat normal map (RGB: 128,128,255) unsigned char flatNormal[3] = {128, 128, 255}; glGenTextures(1, &defaultNormalMap); @@ -100,6 +108,51 @@ void Renderer::Init() s_DrawCalls = 0; } +void Renderer::UpdateClusterLights() +{ + PROFILE_ENGINE_SCOPE("Renderer::UpdateClusterLights"); + + s_ClusterCols = (width + CLUSTER_SIZE - 1) / CLUSTER_SIZE; + s_ClusterRows = (height + CLUSTER_SIZE - 1) / CLUSTER_SIZE; + int totalClusters = s_ClusterCols * s_ClusterRows; + + s_Clusters.resize(totalClusters); + for (auto &c : s_Clusters) + c.lightIndices.clear(); + + for (int i = 0; i < s_Lights.size(); ++i) + { + const Light &light = s_Lights[i]; + glm::vec2 min = light.screenPos - glm::vec2(light.radius); + glm::vec2 max = light.screenPos + glm::vec2(light.radius); + + int minX = glm::clamp(int(min.x) / CLUSTER_SIZE, 0, s_ClusterCols - 1); + int maxX = glm::clamp(int(max.x) / CLUSTER_SIZE, 0, s_ClusterCols - 1); + int minY = glm::clamp(int(min.y) / CLUSTER_SIZE, 0, s_ClusterRows - 1); + int maxY = glm::clamp(int(max.y) / CLUSTER_SIZE, 0, s_ClusterRows - 1); + + for (int y = minY; y <= maxY; ++y) + for (int x = minX; x <= maxX; ++x) + { + Cluster &cluster = s_Clusters[y * s_ClusterCols + x]; + if (cluster.lightIndices.size() < MAX_LIGHTS_PER_CLUSTER) + cluster.lightIndices.push_back(i); + } + } + + std::vector packed; + packed.resize(totalClusters * MAX_LIGHTS_PER_CLUSTER, -1); + for (int i = 0; i < totalClusters; ++i) + { + for (int j = 0; j < s_Clusters[i].lightIndices.size(); ++j) + packed[i * MAX_LIGHTS_PER_CLUSTER + j] = s_Clusters[i].lightIndices[j]; + } + + glBindBuffer(GL_SHADER_STORAGE_BUFFER, s_ClusterSSBO); + glBufferData(GL_SHADER_STORAGE_BUFFER, packed.size() * sizeof(int), packed.data(), GL_DYNAMIC_DRAW); + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, s_ClusterSSBO); +} + void Renderer::Resize(int w, int h) { @@ -213,10 +266,6 @@ void Renderer::DrawTilemap(TilemapComponent *tilemap, const glm::vec2 &worldPos, glBindVertexArray(0); } - - - - void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float zoom, glm::vec2 &CameraPos) { PROFILE_DEEP_SCOPE("DrawSprite"); @@ -286,6 +335,10 @@ void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float z } shader->SetInt("uLightCount", static_cast(s_Lights.size())); + shader->SetInt("uClusterWidth", CLUSTER_SIZE); + shader->SetInt("uClusterHeight", CLUSTER_SIZE); + shader->SetInt("uClusterCols", s_ClusterCols); + shader->SetInt("uMaxLightsPerCluster", MAX_LIGHTS_PER_CLUSTER); for (size_t i = 0; i < s_Lights.size(); ++i) { @@ -303,6 +356,8 @@ void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float z glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, sprite->GetNormalMapID() ? sprite->GetNormalMapID() : defaultNormalMap); } + + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, s_ClusterSSBO); } { diff --git a/src/src/Renderer.h b/src/src/Renderer.h index bb48863..e0efe4c 100644 --- a/src/src/Renderer.h +++ b/src/src/Renderer.h @@ -2,6 +2,7 @@ #include #include #include +#include #include "Components/TilemapComponent.h" #include "Components/SpriteComponent.h" @@ -9,12 +10,10 @@ #include "utils/Shader.h" #include "utils/Profiler.h" - struct ColorCorrection { float brightness = 1.0f; float saturation = 1.0f; float gamma = 1.0f; - void Upload(Shader& shader) const { shader.SetFloat("uBrightness", brightness); @@ -23,17 +22,14 @@ struct ColorCorrection { } }; - -struct Light -{ +struct Light { glm::vec2 screenPos; glm::vec3 color; float intensity; float radius; }; -class Renderer -{ +class Renderer { public: static void Init(); static void Resize(int w, int h); @@ -47,7 +43,6 @@ public: static void ClearLights(); static void DrawEditorGrid(const glm::vec2 &cameraPos, float zoom); - static void DrawGizmoLine(const glm::vec2 &worldStart, const glm::vec2 &worldEnd, const glm::vec3 &color, const glm::vec2 &cameraPos, float zoom); static void DrawGizmoRect(const glm::vec2 &worldPos, const glm::vec2 &size, const glm::vec3 &color, const glm::vec2 &cameraPos, float zoom); static void DrawGizmoCircle(const glm::vec2 &worldCenter, float radius, int segments, const glm::vec3 &color, const glm::vec2 &cameraPos, float zoom); @@ -58,11 +53,14 @@ public: static int GetLightsCount(); static void SetColorCorrection(std::unique_ptr correction); - static ColorCorrection *GetColorCorrection(); + // Clustered lighting + static void UpdateClusterLights(); // Call once per frame after all lights added + private: static std::vector s_Lights; + static GLuint fbo, textureColorBuffer, rbo; static GLuint defaultNormalMap; static int width, height; @@ -74,4 +72,19 @@ private: static GLuint LoadShader(const char *vertexSrc, const char *fragmentSrc); static std::unique_ptr s_ColorCorrection; + + // --- Clustered Lighting --- + static constexpr int CLUSTER_SIZE = 16; + static constexpr int MAX_LIGHTS_PER_CLUSTER = 32; + + struct Cluster { + std::vector lightIndices; + }; + + static std::vector s_Clusters; + static GLuint s_ClusterSSBO; + static int s_ClusterCols; + static int s_ClusterRows; + + }; diff --git a/src/src/utils/utils.h b/src/src/utils/utils.h index c0b75d0..326a6d7 100644 --- a/src/src/utils/utils.h +++ b/src/src/utils/utils.h @@ -2,6 +2,7 @@ #include #include +#include // Returns filename from a full path (e.g., "C:/foo/bar.png" → "bar.png") std::string GetFilenameFromPath(const std::string& path); @@ -10,3 +11,28 @@ std::string GetFilenameFromPath(const std::string& path); GLuint LoadTextureIfNeeded(const std::string& path); bool DeleteLatestLogFile(); + + +// HSV → RGB helper +inline glm::vec3 HSVtoRGB(float h, float s, float v) +{ + float r, g, b; + + int i = int(h * 6); + float f = h * 6 - i; + float p = v * (1 - s); + float q = v * (1 - f * s); + float t = v * (1 - (1 - f) * s); + + switch (i % 6) + { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } + + return glm::vec3(r, g, b); +} \ No newline at end of file