Browse Source

Added a bilboard renderer

Added a simple point light bilboard renderer to visualize the point light in the world.
Jef Belmans 2 years ago
parent
commit
8ae6cae494
39 changed files with 550 additions and 618 deletions
  1. 43 177
      .idea/workspace.xml
  2. 3 29
      build/debug/CMakeFiles/clion-Debug-log.txt
  3. 26 98
      build/debug/build.ninja
  4. BIN
      build/release/.ninja_deps
  5. 71 33
      build/release/.ninja_log
  6. 3 29
      build/release/CMakeFiles/clion-Release-log.txt
  7. 2 2
      build/release/Testing/Temporary/LastTest.log
  8. BIN
      build/release/assets/shaders/compiled/simple_shader.frag.spv
  9. BIN
      build/release/assets/shaders/compiled/simple_shader.vert.spv
  10. 26 98
      build/release/build.ninja
  11. 5 4
      coral_renderer/CMakeLists.txt
  12. 0 1
      coral_renderer/coral_frame_info.cpp
  13. 2 2
      coral_renderer/coral_frame_info.h
  14. 12 1
      coral_renderer/coral_gameobject.cpp
  15. 18 8
      coral_renderer/coral_gameobject.h
  16. 16 12
      coral_renderer/coral_mesh.cpp
  17. 5 3
      coral_renderer/coral_mesh.h
  18. 14 9
      coral_renderer/coral_pipeline.cpp
  19. 3 0
      coral_renderer/coral_pipeline.h
  20. 3 3
      coral_renderer/coral_texture.cpp
  21. 1 1
      coral_renderer/coral_texture.h
  22. 24 33
      coral_renderer/first_app.cpp
  23. 1 3
      coral_renderer/first_app.h
  24. 107 0
      coral_renderer/point_light_system.cpp
  25. 41 0
      coral_renderer/point_light_system.h
  26. 24 8
      coral_renderer/render_system.cpp
  27. 2 1
      coral_renderer/render_system.h
  28. 0 25
      shaders/PosNormCol.frag
  29. 0 35
      shaders/PosNormCol.vert
  30. BIN
      shaders/compiled/PosNormCol.frag.spv
  31. BIN
      shaders/compiled/PosNormCol.vert.spv
  32. BIN
      shaders/compiled/point_light.frag.spv
  33. BIN
      shaders/compiled/point_light.vert.spv
  34. BIN
      shaders/compiled/simple_shader.frag.spv
  35. BIN
      shaders/compiled/simple_shader.vert.spv
  36. 41 0
      shaders/point_light.frag
  37. 54 0
      shaders/point_light.vert
  38. 1 1
      shaders/simple_shader.frag
  39. 2 2
      shaders/simple_shader.vert

+ 43 - 177
.idea/workspace.xml

@@ -32,191 +32,40 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="e2ea9cb6-a6b7-419f-9266-e5263673b6e6" name="Changes" comment="Fixed MaterialUBO memory alignment. All variables are now correctly aligned and read in the shader.">
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/query/cache-v2" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/query/cmakeFiles-v1" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/query/codemodel-v2" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/query/toolchains-v1" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/cache-v2-d309c51079d728a9c7b7.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/cmakeFiles-v1-0af3f51077ac018a560a.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/codemodel-v2-89710fa4a7b7eae280fc.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/directory-.-Release-d0094a50bb2071803777.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/directory-coral_renderer-Release-5392f6549fb2d15b5d89.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/directory-third_party-Release-a2e0515af5b7021cdaa7.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/directory-third_party.GLFW-Release-4b1c51cf63272c7f8fa8.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/directory-third_party.GLFW.src-Release-7b140535f7c1ccf90331.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/index-2023-10-06T13-21-46-0860.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-Shaders-Release-7953c23a9ce8f7243b07.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-copy_assets-Release-f70f0f5c9a1e494a391c.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-coral_renderer-Release-9a06d3d76eef0821dc74.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-glfw-Release-0cc3876a0cfb923ea0ba.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-tinyobjloader-Release-c43d3924043a470e60b6.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-uninstall-Release-f7827f6ef723ed4eb840.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-update_mappings-Release-2b1bfc2c09f4eacb07ff.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/target-vkbootstrap-Release-5cab5408b7b9bd30a893.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/.cmake/api/v1/reply/toolchains-v1-e342d7331276a330d3bb.json" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeCache.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CMakeCCompiler.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CMakeCXXCompiler.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_C.bin" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_CXX.bin" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CMakeRCCompiler.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CMakeSystem.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CompilerIdC/CMakeCCompilerId.c" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/3.26.4/CompilerIdCXX/CMakeCXXCompilerId.cpp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/CMakeConfigureLog.yaml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/CMakeDirectoryInformation.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/CMakeRuleHashes.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/Makefile.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/Makefile2" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/TargetDirectories.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/clion-Release-log.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/clion-environment.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/cmake.check_cache" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/CMakeFiles/progress.marks" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/Coral3D.cbp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/Makefile" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/assets/shaders/compiled/PosNormCol.frag.spv" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/assets/shaders/compiled/PosNormCol.vert.spv" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/assets/shaders/compiled/simple_shader.frag.spv" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/assets/shaders/compiled/simple_shader.vert.spv" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/cmake_install.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/CMakeDirectoryInformation.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/Shaders.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/Shaders.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/Shaders.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/Shaders.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/Shaders.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/Shaders.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/copy_assets.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/copy_assets.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/copy_assets.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/copy_assets.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/copy_assets.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/copy_assets.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/flags.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/includes_CXX.rsp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/link.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/linkLibs.rsp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/objects1.rsp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/coral_renderer.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/CMakeFiles/progress.marks" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/Makefile" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/coral_renderer/cmake_install.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/CMakeDirectoryInformation.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/progress.marks" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/cmake_clean_target.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/flags.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/includes_CXX.rsp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/link.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/tinyobjloader.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/cmake_clean_target.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/flags.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/includes_CXX.rsp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/link.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/CMakeFiles/vkbootstrap.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/CMakeDirectoryInformation.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/Export/f367bd07922f2ecfc14cf5547f1f7c4e/glfw3Targets-release.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/Export/f367bd07922f2ecfc14cf5547f1f7c4e/glfw3Targets.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/progress.marks" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/uninstall.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/uninstall.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/uninstall.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/uninstall.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/uninstall.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/CMakeFiles/uninstall.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/GLFW.cbp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/Makefile" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/cmake_install.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/cmake_uninstall.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/CMakeDirectoryInformation.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/cmake_clean_target.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/flags.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/includes_C.rsp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/link.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/glfw.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/progress.marks" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/update_mappings.dir/DependInfo.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/update_mappings.dir/build.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/update_mappings.dir/cmake_clean.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/update_mappings.dir/compiler_depend.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/update_mappings.dir/compiler_depend.ts" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/CMakeFiles/update_mappings.dir/progress.make" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/Makefile" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/cmake_install.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/glfw3.pc" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/glfw3Config.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/glfw3ConfigVersion.cmake" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/GLFW/src/glfw_config.h" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/Makefile" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/cmake-build-release/third_party/cmake_install.cmake" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/coral_renderer/point_light_system.cpp" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/coral_renderer/point_light_system.h" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/shaders/compiled/point_light.frag.spv" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/shaders/point_light.frag" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/shaders/point_light.vert" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeCache.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeCache.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeCCompiler.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeCCompiler.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeCXXCompiler.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeCXXCompiler.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_C.bin" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_C.bin" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_CXX.bin" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_CXX.bin" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeRCCompiler.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/3.26.4/CMakeRCCompiler.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/CMakeConfigureLog.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/CMakeConfigureLog.yaml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/TargetDirectories.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/TargetDirectories.txt" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/clion-Debug-log.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/clion-Debug-log.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/clion-environment.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/clion-environment.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/CMakeFiles/rules.ninja" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/CMakeFiles/rules.ninja" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/debug/build.ninja" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/build.ninja" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/coral_renderer/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/coral_renderer/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/third_party/GLFW/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/third_party/GLFW/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/third_party/GLFW/cmake_uninstall.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/third_party/GLFW/cmake_uninstall.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/third_party/GLFW/src/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/third_party/GLFW/src/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/debug/third_party/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/debug/third_party/cmake_install.cmake" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/.ninja_deps" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/.ninja_deps" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/.ninja_log" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/.ninja_log" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeCache.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeCache.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeCCompiler.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeCCompiler.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeCXXCompiler.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeCXXCompiler.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_C.bin" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_C.bin" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_CXX.bin" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeDetermineCompilerABI_CXX.bin" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeRCCompiler.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/3.26.4/CMakeRCCompiler.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/CMakeConfigureLog.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/CMakeConfigureLog.yaml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/TargetDirectories.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/TargetDirectories.txt" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/clion-Release-log.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/clion-Release-log.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/clion-environment.txt" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/clion-environment.txt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/CMakeFiles/rules.ninja" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/CMakeFiles/rules.ninja" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/Testing/Temporary/LastTest.log" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/Testing/Temporary/LastTest.log" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/assets/shaders/compiled/simple_shader.frag.spv" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/assets/shaders/compiled/simple_shader.frag.spv" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/assets/shaders/compiled/simple_shader.vert.spv" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/assets/shaders/compiled/simple_shader.vert.spv" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/build/release/build.ninja" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/build.ninja" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/coral_renderer/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/coral_renderer/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/third_party/GLFW/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/third_party/GLFW/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/third_party/GLFW/cmake_uninstall.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/third_party/GLFW/cmake_uninstall.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/third_party/GLFW/src/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/third_party/GLFW/src/cmake_install.cmake" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/build/release/third_party/cmake_install.cmake" beforeDir="false" afterPath="$PROJECT_DIR$/build/release/third_party/cmake_install.cmake" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/CMakeLists.txt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_frame_info.cpp" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/coral_renderer/coral_frame_info.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_frame_info.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_gameobject.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_gameobject.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_gameobject.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_gameobject.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_mesh.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_mesh.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_mesh.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_mesh.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_pipeline.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_pipeline.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_pipeline.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_pipeline.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_texture.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_texture.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/coral_texture.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/coral_texture.h" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/coral_renderer/first_app.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/first_app.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/first_app.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/first_app.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/render_system.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/render_system.cpp" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/coral_renderer/render_system.h" beforeDir="false" afterPath="$PROJECT_DIR$/coral_renderer/render_system.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/shaders/PosNormCol.frag" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/shaders/PosNormCol.vert" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/shaders/compiled/PosNormCol.frag.spv" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/shaders/compiled/PosNormCol.vert.spv" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/shaders/compiled/simple_shader.frag.spv" beforeDir="false" afterPath="$PROJECT_DIR$/shaders/compiled/simple_shader.frag.spv" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/shaders/compiled/simple_shader.vert.spv" beforeDir="false" afterPath="$PROJECT_DIR$/shaders/compiled/simple_shader.vert.spv" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/shaders/simple_shader.frag" beforeDir="false" afterPath="$PROJECT_DIR$/shaders/simple_shader.frag" afterDir="false" />
@@ -290,20 +139,25 @@
     "cidr.known.project.marker": "true",
     "git-widget-placeholder": "point-lights",
     "ignore.virus.scanning.warn.message": "true",
-    "last_opened_file_path": "C:/Game Development/Visual Studio Solutions/Coral3D",
+    "last_opened_file_path": "E:/Game Development/Visual Studio Solutions/Coral3D/coral_renderer",
     "node.js.detected.package.eslint": "true",
     "node.js.detected.package.tslint": "true",
     "node.js.selected.package.eslint": "(autodetect)",
     "node.js.selected.package.tslint": "(autodetect)",
-    "settings.editor.selected.configurable": "CMakeSettings",
+    "settings.editor.selected.configurable": "CPPToolchains",
     "structure.view.defaults.are.configured": "true",
     "vue.rearranger.settings.migration": "true"
   }
 }]]></component>
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="E:\Game Development\Visual Studio Solutions\Coral3D\coral_renderer" />
+    </key>
+  </component>
   <component name="RunManager">
-    <configuration default="true" type="CLionExternalRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true">
+    <configuration default="true" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true">
       <method v="2">
-        <option name="CLION.EXTERNAL.BUILD" enabled="true" />
+        <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
       </method>
     </configuration>
     <configuration name="coral_renderer" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Coral3D" TARGET_NAME="coral_renderer" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Coral3D" RUN_TARGET_NAME="coral_renderer">
@@ -381,6 +235,9 @@
       <workItem from="1696409218795" duration="337000" />
       <workItem from="1696449444238" duration="4477000" />
       <workItem from="1696518823306" duration="2282000" />
+      <workItem from="1696602059143" duration="666000" />
+      <workItem from="1696605383562" duration="9264000" />
+      <workItem from="1696621767016" duration="4005000" />
     </task>
     <task id="LOCAL-00001" summary="Have I forgotten how to git?">
       <option name="closed" value="true" />
@@ -417,6 +274,15 @@
     <option name="LAST_COMMIT_MESSAGE" value="Fixed MaterialUBO memory alignment. All variables are now correctly aligned and read in the shader." />
   </component>
   <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType">
+          <url>file://$PROJECT_DIR$/coral_renderer/point_light_system.cpp</url>
+          <line>59</line>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
     <watches-manager>
       <configuration name="CMakeRunConfiguration">
         <watch expression="glTF_image.height" />

+ 3 - 29
build/debug/CMakeFiles/clion-Debug-log.txt

@@ -1,39 +1,13 @@
 "C:\Program Files\JetBrains\CLion 2023.2\bin\cmake\win\x64\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=C:/Program Files/JetBrains/CLion 2023.2/bin/ninja/win/x64/ninja.exe" -G Ninja -S "E:\Game Development\Visual Studio Solutions\Coral3D" -B "E:\Game Development\Visual Studio Solutions\Coral3D\build\debug"
--- The C compiler identification is GNU 13.1.0
--- The CXX compiler identification is GNU 13.1.0
--- Detecting C compiler ABI info
--- Detecting C compiler ABI info - done
--- Check for working C compiler: C:/Program Files/JetBrains/CLion 2023.2/bin/mingw/bin/gcc.exe - skipped
--- Detecting C compile features
--- Detecting C compile features - done
--- Detecting CXX compiler ABI info
--- Detecting CXX compiler ABI info - done
--- Check for working CXX compiler: C:/Program Files/JetBrains/CLion 2023.2/bin/mingw/bin/g++.exe - skipped
--- Detecting CXX compile features
--- Detecting CXX compile features - done
--- Found Vulkan: C:/VulkanSDK/1.3.250.0/Lib/vulkan-1.lib (found version "1.3.250") found components: glslc glslangValidator 
 -- BUILDING SHADER
--- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/PosNormCol.frag
+-- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/point_light.frag
 -- BUILDING SHADER
--- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/PosNormCol.vert
+-- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/point_light.vert
 -- BUILDING SHADER
 -- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/simple_shader.frag
 -- BUILDING SHADER
 -- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/simple_shader.vert
--- Performing Test CMAKE_HAVE_LIBC_PTHREAD
--- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
--- Found Threads: TRUE  
--- Looking for dinput.h
--- Looking for dinput.h - found
--- Looking for xinput.h
--- Looking for xinput.h - found
--- Performing Test _GLFW_HAS_DEP
--- Performing Test _GLFW_HAS_DEP - Success
--- Performing Test _GLFW_HAS_ASLR
--- Performing Test _GLFW_HAS_ASLR - Success
--- Performing Test _GLFW_HAS_64ASLR
--- Performing Test _GLFW_HAS_64ASLR - Success
 -- Using Win32 for window creation
--- Configuring done (2.7s)
+-- Configuring done (0.1s)
 -- Generating done (0.0s)
 -- Build files have been written to: E:/Game Development/Visual Studio Solutions/Coral3D/build/debug

File diff suppressed because it is too large
+ 26 - 98
build/debug/build.ninja


BIN
build/release/.ninja_deps


+ 71 - 33
build/release/.ninja_log

@@ -1,56 +1,94 @@
 # ninja log v5
+18	1291	7183283047655074	coral_renderer/CMakeFiles/coral_renderer.dir/point_light_system.cpp.obj	9032090700129b1a
 55	1725	7183022336983463	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_thread.c.obj	1d3576b97de4dcfd
-236	2685	7183022346592449	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	2b1afc763cc7fd7d
+5	1256	7183283047301730	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	2b1afc763cc7fd7d
+223	1227	7183022331958345	coral_renderer/CMakeFiles/coral_renderer.dir/coral_window.cpp.obj	ebb5501fcd7328ce
 81	1905	7183022338800220	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_monitor.c.obj	149f73e3b2fe6a10
 37	1800	7183022337689163	third_party/GLFW/src/CMakeFiles/glfw.dir/init.c.obj	2200c22e2fbf5f9b
-223	1227	7183022331958345	coral_renderer/CMakeFiles/coral_renderer.dir/coral_window.cpp.obj	ebb5501fcd7328ce
 1060	2157	7183022341327532	coral_renderer/CMakeFiles/coral_renderer.dir/coral_camera.cpp.obj	d59158bd7f301b98
 65	1877	7183022338494917	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_init.c.obj	6d7558a01a2b92c3
 86	1781	7183022337343800	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_time.c.obj	e692993acf9f94ac
-1803	1945	7183049867186497	coral_renderer/coral_renderer.exe	6e55fd985a583a28
 92	1810	7183022337824274	third_party/GLFW/src/CMakeFiles/glfw.dir/osmesa_context.c.obj	54773fed0db7e7b1
+15809	15954	7183283194247561	coral_renderer/coral_renderer.exe	4d6a346da4510760
+166	1660	7183263084377971	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	976f54a312d4fda
 75	1799	7183022337674141	third_party/GLFW/src/CMakeFiles/glfw.dir/vulkan.c.obj	1d1eab9fa8d7eeed
-1782	3338	7183022353143599	coral_renderer/CMakeFiles/coral_renderer.dir/coral_descriptors.cpp.obj	976f54a312d4fda
 29	1877	7183022338504965	third_party/GLFW/src/CMakeFiles/glfw.dir/monitor.c.obj	da1b97f86a6f1881
 33	1891	7183022338650093	third_party/GLFW/src/CMakeFiles/glfw.dir/context.c.obj	769cf2954fa9296c
-41	1899	7183022338735169	third_party/GLFW/src/CMakeFiles/glfw.dir/egl_context.c.obj	3d2a39fb62cc5d09
 70	1892	7183022338650093	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_joystick.c.obj	731e24eae4f6c3c0
-247	1817	7183022337894331	coral_renderer/CMakeFiles/coral_renderer.dir/vk_initializers.cpp.obj	c70ea6a045b04a90
+41	1899	7183022338735169	third_party/GLFW/src/CMakeFiles/glfw.dir/egl_context.c.obj	3d2a39fb62cc5d09
 46	2214	7183022341898103	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_window.c.obj	ac8316922cd6d380
+143	1003	7183263077808835	coral_renderer/CMakeFiles/coral_renderer.dir/vk_initializers.cpp.obj	c70ea6a045b04a90
 60	1982	7183022339565951	third_party/GLFW/src/CMakeFiles/glfw.dir/window.c.obj	a05896c745e87d4a
 293	1059	7183022330311772	coral_renderer/CMakeFiles/coral_renderer.dir/coral_utils.cpp.obj	6f14caec93e90570
+5	106	7183279020592963	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/point_light.frag.spv	6d3a602ccc13fa0e
 50	1972	7183022339460801	third_party/GLFW/src/CMakeFiles/glfw.dir/wgl_context.c.obj	371d8c14a557d0ce
 25	2089	7183022340631937	third_party/GLFW/src/CMakeFiles/glfw.dir/input.c.obj	a690aad864a072ff
+9	106	7183279020592963	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/point_light.vert.spv	87717d1f7db06f5d
 2214	2298	7183022342738867	third_party/GLFW/src/libglfw3.a	fc48f5f1f632859b
-282	2461	7183022344365359	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	cb2e4f201849c024
-288	2457	7183022344330311	coral_renderer/CMakeFiles/coral_renderer.dir/coral_texture.cpp.obj	c0771ce2d8c57d44
-271	2641	7183022346156987	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	3e1fca21fb1049ab
-97	1277	7183045860443243	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	3426bcb39c57484b
-253	2804	7183022347798563	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	c97492ac4e9c2f4f
-265	17513	7183022494848944	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	ec9b9c950c06d57a
+161	1396	7183263081734204	coral_renderer/CMakeFiles/coral_renderer.dir/coral_texture.cpp.obj	c0771ce2d8c57d44
+149	1510	7183263082875236	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	cb2e4f201849c024
+21	1206	7183283046801007	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	3e1fca21fb1049ab
+12	1245	7183283047196439	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	3426bcb39c57484b
+129	1727	7183263085058568	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	c97492ac4e9c2f4f
 87	3107	7165258684040000	coral_renderer/CMakeFiles/coral_renderer.dir/coral_material.cpp.obj	432ccaf3a8cd54b8
-259	2876	7183022348509270	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	9f4b5b8fbef6fb7c
-100	1216	7183045859842669	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	9f969c086058a660
+15	15809	7183283192809073	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	ec9b9c950c06d57a
+139	1855	7183263086334773	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	9f4b5b8fbef6fb7c
 18	4738	7183022367136384	third_party/CMakeFiles/vkbootstrap.dir/vkbootstrap/VkBootstrap.cpp.obj	f6b337d1309e9955
-242	3158	7183022351346890	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	f22c3ebb3984eea4
-5	1802	7183049865805221	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+28	1202	7183091372760031	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	9f969c086058a660
+146	2176	7183263089544832	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	f22c3ebb3984eea4
+9	2024	7183283054985953	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
 4739	4785	7183022367622250	third_party/libvkbootstrap.a	c71ed427a7b8907
-1228	5203	7183022371791054	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	8b51063e5bc12069
-3	552	7183017722621444	build.ninja	fa936e3b47cbade3
-0	1471	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+174	3650	7183263104275051	coral_renderer/CMakeFiles/coral_renderer.dir/coral_buffer.cpp.obj	8b51063e5bc12069
+3	552	7183260939683576	build.ninja	fa936e3b47cbade3
+0	1457	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
 22	4062	7183022360380247	third_party/CMakeFiles/tinyobjloader.dir/tinyobjloader/tiny_obj_loader.cc.obj	fd1983a21fbb7956
+9	93	7183272486981321	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	3c7e702a8a128f67
 4062	4108	7183022360855718	third_party/libtinyobjloader.a	99fa9adb75ddfe5c
-5	92	7183043855373659	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	3c7e702a8a128f67
-7	209	7183022321668756	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/PosNormCol.frag.spv	25e4e325e1ba0bc9
-15	213	7183022321733812	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/PosNormCol.vert.spv	bfdb78465c959f36
-5	91	7183050223030782	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	f376e2cf516c4f9c
-0	1471	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
-4	89	7183050451280557	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	f376e2cf516c4f9c
-0	1404	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
-0	1404	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
-12	1116	7183050670185122	coral_renderer/CMakeFiles/coral_renderer.dir/coral_frame_info.cpp.obj	9f969c086058a660
-9	1168	7183050670705571	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	3426bcb39c57484b
-5	1913	7183050678159504	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
-1913	2053	7183050679515724	coral_renderer/coral_renderer.exe	6e55fd985a583a28
-0	1372	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
-0	1372	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+15	129	7183263068966629	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	f376e2cf516c4f9c
+0	1457	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+5	1150	7183283581372063	coral_renderer/CMakeFiles/coral_renderer.dir/point_light_system.cpp.obj	9032090700129b1a
+1150	1292	7183283582746143	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1382	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1382	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+4	1155	7183286851902365	coral_renderer/CMakeFiles/coral_renderer.dir/point_light_system.cpp.obj	9032090700129b1a
+1155	1299	7183286853302808	coral_renderer/coral_renderer.exe	4d6a346da4510760
+1	1434	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+1	1434	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+5	2089	7183287083131537	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+2089	2230	7183287084495013	coral_renderer/coral_renderer.exe	4d6a346da4510760
+1	1396	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+1	1396	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+4	2064	7183287220058597	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+2064	2206	7183287221443059	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1437	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1437	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+5	2150	7183287925598006	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+2150	2292	7183287926978195	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1409	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1409	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+4	91	7183289093797565	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/point_light.frag.spv	6d3a602ccc13fa0e
+0	1328	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1328	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+4	90	7183289371307709	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/point_light.vert.spv	87717d1f7db06f5d
+0	1390	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1390	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+4	99	7183289686981961	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/point_light.vert.spv	87717d1f7db06f5d
+9	102	7183289687027214	E:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/point_light.frag.spv	6d3a602ccc13fa0e
+0	1342	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1342	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+5	1863	7183290197360974	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+1864	2009	7183290198767918	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1420	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1420	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+4	1860	7183290409150912	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+1860	2002	7183290410515506	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1386	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1386	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+5	1871	7183290692881511	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+1871	2014	7183290694280795	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1467	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1467	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+5	1878	7183290847785823	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	db0c627bbb247e94
+1878	2021	7183290849170781	coral_renderer/coral_renderer.exe	4d6a346da4510760
+0	1341	0	coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866
+0	1341	0	E:/Game Development/Visual Studio Solutions/Coral3D/build/release/coral_renderer/CMakeFiles/copy_assets	66424d61a55ca866

+ 3 - 29
build/release/CMakeFiles/clion-Release-log.txt

@@ -1,39 +1,13 @@
 "C:\Program Files\JetBrains\CLion 2023.2\bin\cmake\win\x64\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Release "-DCMAKE_MAKE_PROGRAM=C:/Program Files/JetBrains/CLion 2023.2/bin/ninja/win/x64/ninja.exe" -G Ninja -S "E:\Game Development\Visual Studio Solutions\Coral3D" -B "E:\Game Development\Visual Studio Solutions\Coral3D\build\release"
--- The C compiler identification is GNU 13.1.0
--- The CXX compiler identification is GNU 13.1.0
--- Detecting C compiler ABI info
--- Detecting C compiler ABI info - done
--- Check for working C compiler: C:/Program Files/JetBrains/CLion 2023.2/bin/mingw/bin/gcc.exe - skipped
--- Detecting C compile features
--- Detecting C compile features - done
--- Detecting CXX compiler ABI info
--- Detecting CXX compiler ABI info - done
--- Check for working CXX compiler: C:/Program Files/JetBrains/CLion 2023.2/bin/mingw/bin/g++.exe - skipped
--- Detecting CXX compile features
--- Detecting CXX compile features - done
--- Found Vulkan: C:/VulkanSDK/1.3.250.0/Lib/vulkan-1.lib (found version "1.3.250") found components: glslc glslangValidator 
 -- BUILDING SHADER
--- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/PosNormCol.frag
+-- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/point_light.frag
 -- BUILDING SHADER
--- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/PosNormCol.vert
+-- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/point_light.vert
 -- BUILDING SHADER
 -- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/simple_shader.frag
 -- BUILDING SHADER
 -- E:/Game Development/Visual Studio Solutions/Coral3D/shaders/simple_shader.vert
--- Performing Test CMAKE_HAVE_LIBC_PTHREAD
--- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
--- Found Threads: TRUE  
--- Looking for dinput.h
--- Looking for dinput.h - found
--- Looking for xinput.h
--- Looking for xinput.h - found
--- Performing Test _GLFW_HAS_DEP
--- Performing Test _GLFW_HAS_DEP - Success
--- Performing Test _GLFW_HAS_ASLR
--- Performing Test _GLFW_HAS_ASLR - Success
--- Performing Test _GLFW_HAS_64ASLR
--- Performing Test _GLFW_HAS_64ASLR - Success
 -- Using Win32 for window creation
--- Configuring done (2.7s)
+-- Configuring done (0.1s)
 -- Generating done (0.0s)
 -- Build files have been written to: E:/Game Development/Visual Studio Solutions/Coral3D/build/release

+ 2 - 2
build/release/Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Oct 06 16:17 Romance Daylight Time
+Start testing: Oct 06 22:58 Romance Daylight Time
 ----------------------------------------------------------
-End testing: Oct 06 16:17 Romance Daylight Time
+End testing: Oct 06 22:58 Romance Daylight Time

BIN
build/release/assets/shaders/compiled/simple_shader.frag.spv


BIN
build/release/assets/shaders/compiled/simple_shader.vert.spv


File diff suppressed because it is too large
+ 26 - 98
build/release/build.ninja


+ 5 - 4
coral_renderer/CMakeLists.txt

@@ -16,8 +16,7 @@ add_executable(coral_renderer
     "coral_mesh.h"
     "coral_mesh.cpp"
     "coral_gameobject.h"
-    "coral_gameobject.cpp"
-    "coral_renderer.h"
+        "coral_renderer.h"
     "coral_renderer.cpp"
     "render_system.h"
     "render_system.cpp"
@@ -30,9 +29,11 @@ add_executable(coral_renderer
     "coral_buffer.h"
     "coral_buffer.cpp"
     "coral_frame_info.h"
-    "coral_frame_info.cpp"
-    "coral_descriptors.h"
+        "coral_descriptors.h"
     "coral_descriptors.cpp"
+        point_light_system.cpp
+        point_light_system.h
+        coral_gameobject.cpp
 )
 
 if(MSVC)

+ 0 - 1
coral_renderer/coral_frame_info.cpp

@@ -1 +0,0 @@
-#include "coral_frame_info.h"

+ 2 - 2
coral_renderer/coral_frame_info.h

@@ -25,11 +25,11 @@ namespace coral_3d
 
         // GLOBAL LIGHT
         glm::vec4 global_light_direction{ glm::normalize(glm::vec4{ -0.477f, 0.477f, -0.477f, 0.f})}; // w is intensity
-        glm::vec4 ambient_lighting{0.14f, 0.12f, 0.10f, 0.15f}; // w is intensity
+        glm::vec4 ambient_lighting{0.14f, 0.14f, 0.14f, 0.05f}; // w is intensity
 
         // POINT LIGHTS
         PointLight point_lights[MAX_POINT_LIGHTS];
-        float num_lights{0.f};
+        int num_lights{0};
     };
 
 	struct FrameInfo

+ 12 - 1
coral_renderer/coral_gameobject.cpp

@@ -1 +1,12 @@
-#include "coral_gameobject.h"
+#include "coral_gameobject.h"
+
+using namespace coral_3d;
+
+coral_gameobject coral_gameobject::create_point_light(float intensity, float radius, glm::vec3 color)
+{
+    coral_gameobject gameobject = coral_gameobject::create_gameobject();
+    gameobject.transform_.scale.x = radius;
+    gameobject.point_light_ = std::make_unique<PointLightComponent>();
+    gameobject.point_light_->color = glm::vec4(color, intensity);
+    return gameobject;
+}

+ 18 - 8
coral_renderer/coral_gameobject.h

@@ -13,11 +13,11 @@ namespace coral_3d
 {
 	struct TransformComponent
 	{
-		glm::vec3 translation{};
-		glm::vec3 scale{1.f, 1.f, 1.f};
-		glm::vec3 rotation{};
+		glm::vec3 translation{0.f};
+		glm::vec3 scale{1.f};
+		glm::vec3 rotation{0.f};
 
-		// Matrix corrsponds to Translate * Ry * Rx * Rz * Scale
+		// Matrix corresponds to Translate * Ry * Rx * Rz * Scale
 		// Rotations correspond to Tait-bryan angles of Y(1), X(2), Z(3)
 		// https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
 		glm::mat4 mat4()
@@ -58,18 +58,26 @@ namespace coral_3d
 		}
 	};
 
+    struct PointLightComponent
+    {
+        glm::vec4 color{1.f}; // W is intensity
+    };
+
 	class coral_gameobject final
 	{
 	public:
 		using id_t = unsigned int;
-		using Map = std::unordered_map<id_t, coral_gameobject>;
+		using Map = std::unordered_map<id_t, std::shared_ptr<coral_gameobject>>;
 
+        // Creators
 		static coral_gameobject create_gameobject()
 		{
 			static id_t current_id = 0;
 			return coral_gameobject{ current_id++ };
 		}
 
+        static coral_gameobject create_point_light(float intensity = 1.f, float radius = .1f, glm::vec3 color = glm::vec3{1.f});
+
 		coral_gameobject(const coral_gameobject&) = delete;
 		coral_gameobject& operator=(const coral_gameobject&) = delete;
 		coral_gameobject(coral_gameobject&&) = default;
@@ -77,12 +85,14 @@ namespace coral_3d
 
 		id_t get_id() const { return id_; }
 
-		std::shared_ptr<coral_mesh> mesh_;
-		glm::vec3 color_{};
 		TransformComponent transform_{};
 
+        // Optional components
+        std::shared_ptr<coral_mesh> mesh_;
+        std::unique_ptr<PointLightComponent> point_light_ = nullptr;
+
 	private:
-		coral_gameobject(id_t object_id) : id_{ object_id } {}
+		explicit coral_gameobject(id_t object_id) : id_{ object_id } {}
 		id_t id_;
 	};
 }

+ 16 - 12
coral_renderer/coral_mesh.cpp

@@ -20,6 +20,8 @@
 
 #include "coral_utils.h"
 
+#include "coral_gameobject.h"
+
 #define CALC_TANGENTS
 using namespace coral_3d;
 
@@ -47,7 +49,7 @@ VertexInputDescription Vertex::get_vert_desc()
     main_binding.stride = sizeof(Vertex);
     main_binding.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
 
-    desc.bindings_.emplace_back(main_binding);
+    desc.bindings.emplace_back(main_binding);
 
     // Position will be stored at Location 0
     VkVertexInputAttributeDescription position_attrib{};
@@ -117,8 +119,8 @@ bool coral_mesh::Builder::load_from_gltf(coral_device& device, const std::string
         load_node(device, node, glTF_input, nullptr);
     }
 
-    // CALCULATE TANGENTS & BITANGENTS
 #ifdef CALC_TANGENTS
+    // CALCULATE TANGENTS & BITANGENTS
     std::vector<glm::vec3> bitangents{vertices.size()};
 
     for (size_t i = 0; i < indices.size(); i += 3)
@@ -384,8 +386,9 @@ void coral_mesh::Builder::load_node(coral_device& device, const tinygltf::Node &
         nodes.emplace_back(node);
 }
 
-coral_mesh::coral_mesh(coral_device& device, Builder& builder)
+coral_mesh::coral_mesh(coral_device& device, Builder& builder, coral_gameobject* parent)
     : device_{device}
+    , ptr_parent_{parent}
 {
     create_vertex_buffers(builder.vertices);
     create_index_buffers(builder.indices);
@@ -398,11 +401,11 @@ coral_mesh::coral_mesh(coral_device& device, Builder& builder)
 
 coral_mesh::~coral_mesh()
 {
-    for(Material material : materials_)
+    for(const Material& material : materials_)
         vkDestroyPipeline(device_.device(), material.pipeline, nullptr);
 }
 
-std::unique_ptr<coral_mesh> coral_mesh::create_mesh_from_file(coral_device& device, const std::string& file_path)
+std::unique_ptr<coral_mesh> coral_mesh::create_mesh_from_file(coral_device& device, const std::string& file_path, coral_gameobject* parent)
 {
     std::cout<< "INFO! coral_mesh::load_from_gltf() >> Loading mesh..." << std::endl;
     Builder builder{};
@@ -410,7 +413,7 @@ std::unique_ptr<coral_mesh> coral_mesh::create_mesh_from_file(coral_device& devi
     std::cout << "[" << file_path << "] vertex count: " << builder.vertices.size() << "\n";
     std::cout << "[" << file_path << "] index count: " << builder.indices.size() << "\n";
 
-    return std::make_unique<coral_mesh>(device, builder);
+    return std::make_unique<coral_mesh>(device, builder, parent);
 }
 
 void coral_mesh::load_materials(coral_descriptor_set_layout& material_set_layout, coral_descriptor_pool& material_set_pool)
@@ -456,7 +459,7 @@ void coral_mesh::draw_node(VkCommandBuffer command_buffer, VkPipelineLayout pipe
         }
 
         PushConstant push{};
-        push.node_transform = node_transform;
+        push.node_transform = ptr_parent_->transform_.mat4() * node_transform;
 
         // Pass the final matrix to the vertex shader using push constants
         vkCmdPushConstants(
@@ -619,13 +622,14 @@ void coral_mesh::create_pipelines(
     // VERTEX INPUT INFO
     VkPipelineVertexInputStateCreateInfo vertex_input_info{ vkinit::vertex_input_state_ci() };
 
-    VertexInputDescription vertex_desc{ Vertex::get_vert_desc() };
+    auto& binding_descriptions{config_info.binding_descriptions};
+    auto& attribute_descriptions{config_info.attribute_descriptions};
 
-    vertex_input_info.vertexAttributeDescriptionCount = static_cast<uint32_t>(vertex_desc.attributes.size());
-    vertex_input_info.pVertexAttributeDescriptions = vertex_desc.attributes.data();
+    vertex_input_info.vertexAttributeDescriptionCount = static_cast<uint32_t>(attribute_descriptions.size());
+    vertex_input_info.pVertexAttributeDescriptions = attribute_descriptions.data();
 
-    vertex_input_info.vertexBindingDescriptionCount = static_cast<uint32_t>(vertex_desc.bindings_.size());
-    vertex_input_info.pVertexBindingDescriptions = vertex_desc.bindings_.data();
+    vertex_input_info.vertexBindingDescriptionCount = static_cast<uint32_t>(binding_descriptions.size());
+    vertex_input_info.pVertexBindingDescriptions = binding_descriptions.data();
 
     VkGraphicsPipelineCreateInfo pipeline_info{};
     pipeline_info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;

+ 5 - 3
coral_renderer/coral_mesh.h

@@ -21,7 +21,7 @@ namespace coral_3d
 {
 	struct VertexInputDescription
 	{
-		std::vector<VkVertexInputBindingDescription> bindings_;
+		std::vector<VkVertexInputBindingDescription> bindings;
 		std::vector<VkVertexInputAttributeDescription> attributes;
 
 		VkPipelineVertexInputStateCreateFlags flags = 0;
@@ -116,12 +116,12 @@ namespace coral_3d
             void load_node(coral_device& device, const tinygltf::Node& input_node, const tinygltf::Model& input, coral_3d::Node* parent);
 		};
 
-		coral_mesh(coral_device& device, Builder& builder);
+		coral_mesh(coral_device& device, Builder& builder, class coral_gameobject* parent);
         ~coral_mesh();
 		coral_mesh(const coral_mesh&) = delete;
 		coral_mesh& operator=(const coral_mesh&) = delete;
 
-		static std::unique_ptr<coral_mesh> create_mesh_from_file(coral_device& device, const std::string& file_path);
+		static std::unique_ptr<coral_mesh> create_mesh_from_file(coral_device& device, const std::string& file_path, coral_gameobject* parent);
 
         void load_materials(coral_descriptor_set_layout& material_set_layout, coral_descriptor_pool& material_set_pool);
         void create_pipelines(
@@ -145,6 +145,8 @@ namespace coral_3d
 		std::unique_ptr<coral_buffer> vertex_buffer_;
 		std::unique_ptr<coral_buffer> index_buffer_;
 
+        coral_gameobject* ptr_parent_;
+
         std::vector<Image> images_;
         std::vector<Texture> textures_;
         std::vector<Material> materials_;

+ 14 - 9
coral_renderer/coral_pipeline.cpp

@@ -75,6 +75,9 @@ void coral_pipeline::default_pipeline_config_info(PipelineConfigInfo& config_inf
 	config_info.dynamic_state_info.dynamicStateCount =
 		static_cast<uint32_t>(config_info.dynamic_state_enables.size());
 	config_info.dynamic_state_info.flags = 0;
+
+    config_info.binding_descriptions = Vertex::get_vert_desc().bindings;
+    config_info.attribute_descriptions = Vertex::get_vert_desc().attributes;
 }
 
 std::vector<char> coral_pipeline::read_file(const std::string& file_path)
@@ -132,15 +135,17 @@ void coral_pipeline::create_graphics_pipeline(
 	shader_stages[1].pSpecializationInfo = nullptr;
 
 	// VERTEX INPUT INFO
-	VkPipelineVertexInputStateCreateInfo vertex_input_info{ vkinit::vertex_input_state_ci() };
-	
-	VertexInputDescription vertex_desc{ Vertex::get_vert_desc() };
-	
-	vertex_input_info.vertexAttributeDescriptionCount = static_cast<uint32_t>(vertex_desc.attributes.size());
-	vertex_input_info.pVertexAttributeDescriptions = vertex_desc.attributes.data();
 
-	vertex_input_info.vertexBindingDescriptionCount = static_cast<uint32_t>(vertex_desc.bindings_.size());
-	vertex_input_info.pVertexBindingDescriptions = vertex_desc.bindings_.data();
+	auto& binding_descriptions{config_info.binding_descriptions};
+	auto& attribute_descriptions{config_info.attribute_descriptions};
+
+    VkPipelineVertexInputStateCreateInfo vertex_input_info{ vkinit::vertex_input_state_ci() };
+
+	vertex_input_info.vertexAttributeDescriptionCount = static_cast<uint32_t>(attribute_descriptions.size());
+	vertex_input_info.pVertexAttributeDescriptions = attribute_descriptions.data();
+
+	vertex_input_info.vertexBindingDescriptionCount = static_cast<uint32_t>(binding_descriptions.size());
+	vertex_input_info.pVertexBindingDescriptions = binding_descriptions.data();
 
 	VkGraphicsPipelineCreateInfo pipeline_info{};
 	pipeline_info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
@@ -196,7 +201,7 @@ VkPipelineLayout coral_pipeline::create_pipeline_layout(coral_device &device, st
 
     VkPipelineLayout pipeline_layout;
     if (vkCreatePipelineLayout(device.device(), &layout_info, nullptr, &pipeline_layout) != VK_SUCCESS)
-        throw std::runtime_error("ERROR! render_system::create_pipeline_layout() >> Failed to create pipeline layout!");
+        throw std::runtime_error("ERROR! coral_pipeline::create_pipeline_layout() >> Failed to create pipeline layout!");
 
     return pipeline_layout;
 }

+ 3 - 0
coral_renderer/coral_pipeline.h

@@ -15,6 +15,9 @@ namespace coral_3d
 		PipelineConfigInfo(const PipelineConfigInfo&) = delete;
 		PipelineConfigInfo& operator=(const PipelineConfigInfo&) = delete;
 
+        std::vector<VkVertexInputBindingDescription> binding_descriptions{};
+        std::vector<VkVertexInputAttributeDescription> attribute_descriptions{};
+
 		VkPipelineViewportStateCreateInfo viewport_info;
 		VkPipelineInputAssemblyStateCreateInfo input_assembly_info;
 		VkPipelineRasterizationStateCreateInfo rasterization_info;

+ 3 - 3
coral_renderer/coral_texture.cpp

@@ -12,7 +12,7 @@
 
 using namespace coral_3d;
 
-bool coral_texture::Builder::load_image_from_file(coral_device& device, const std::string& file_name)
+bool coral_texture::Builder::load_image_from_file(coral_device& device, const std::string& file_name, VkFormat format)
 {
 	int tex_width, tex_height, tex_channels;
 
@@ -30,7 +30,7 @@ bool coral_texture::Builder::load_image_from_file(coral_device& device, const st
 	VkDeviceSize img_size{ static_cast<uint64_t>(tex_width * tex_height * 4) };
 
 	// This format must match with the format loaded from stb_image
-	VkFormat img_format{ VK_FORMAT_R8G8B8A8_SRGB };
+	VkFormat img_format{ format };
 
 	// Holds texture data to upload to GPU
 	coral_buffer staging_buffer
@@ -170,7 +170,7 @@ coral_texture::~coral_texture()
 std::unique_ptr<coral_texture> coral_texture::create_texture_from_file(coral_device& device, const std::string& file_path, VkFormat format)
 {
 	Builder builder{};
-	builder.load_image_from_file(device, file_path);
+	builder.load_image_from_file(device, file_path, format);
 	return std::make_unique<coral_texture>(device, builder.image, builder.mip_levels, format);
 }
 

+ 1 - 1
coral_renderer/coral_texture.h

@@ -35,7 +35,7 @@ namespace coral_3d
 		{
 			AllocatedImage image;
 			uint32_t mip_levels;
-			bool load_image_from_file(coral_device& device, const std::string& file_name);
+			bool load_image_from_file(coral_device& device, const std::string& file_name, VkFormat format);
 			void generate_mipmaps(coral_device& device, uint32_t width, uint32_t height);
 		};
 

+ 24 - 33
coral_renderer/first_app.cpp

@@ -1,6 +1,7 @@
 #include "first_app.h"
 
 #include "render_system.h"
+#include "point_light_system.h"
 #include "coral_camera.h"
 #include "coral_buffer.h"
 
@@ -36,18 +37,6 @@ void first_app::run()
 	};
     global_ubo.map();
 
-    PointLight point_lights[MAX_POINT_LIGHTS]
-    {
-            {{-6.f, 0.75f, -0.5f, 10.f}, {1.f, 1.f, 1.f, 1.f}},
-            {{-4.f, .75f, -0.5f, 10.f}, {0.f, 1.f, 0.f, 1.f}},
-            {{-2.f, .75f, -0.5f, 10.f}, {0.f, 0.f, 1.f, 1.f}},
-            {{0.f, .75f, -0.5f, 10.f}, {1.f, 1.f, 0.f, 1.f}},
-            {{2.f, .75f, -0.5f, 10.f}, {1.f, 0.f, 1.f, 1.f}},
-            {{4.f, .75f, -0.5f, 10.f}, {0.f, 1.f, 1.f, 1.f}},
-            {{6.f, .75f, -0.5f, 10.f}, {1.f, 0.f, 0.f, 1.f}},
-            {{8.f, .75f, -0.5f, 10.f}, {1.f, 0.5f, 1.f, 1.f}},
-    };
-
     // Set 0: Global descriptor set (Scene data)
     auto global_set_layout = coral_descriptor_set_layout::Builder(device_)
 		.add_binding(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT)
@@ -77,11 +66,12 @@ void first_app::run()
         material_set_layout->get_descriptor_set_layout()
     };
 
-    pipeline_layout_ = coral_pipeline::create_pipeline_layout(device_, desc_set_layouts);
-
     // RENDER SYSTEM
-    render_system render_system{device_, pipeline_layout_};
-    load_gameobjects(*material_set_layout);
+    render_system render_system{device_, desc_set_layouts};
+    load_gameobjects(*material_set_layout, render_system.pipeline_layout());
+
+    // POINT LIGHT SYSTEM
+    point_light_system point_light_system{device_, renderer_.get_swapchain_render_pass(), desc_set_layouts};
 
     // CAMERA
     coral_camera camera{ {0.f, 0.f, 3.f} };
@@ -116,25 +106,19 @@ void first_app::run()
                 gameobjects_
             };
 
-            // UPDATE GLOBAL UBO
+            // UPDATE
             GlobalUBO ubo{};
-
             ubo.view = camera.get_view();
             ubo.view_inverse = glm::inverse(camera.get_view());
             ubo.view_projection = camera.get_projection() * camera.get_view();
-
-            for (int i = 0; i < MAX_POINT_LIGHTS; ++i)
-            {
-                ubo.point_lights[i] = point_lights[i];
-            }
-            ubo.num_lights = MAX_POINT_LIGHTS;
-
+            point_light_system.update(frame_info, ubo);
             global_ubo.write_to_index(&ubo, frame_index);
             global_ubo.flush_index(frame_index);
 
             // RENDER
 			renderer_.begin_swapchain_render_pass(command_buffer);
 			render_system.render_gameobjects(frame_info);
+            point_light_system.render(frame_info);
 			renderer_.end_swapchain_render_pass(command_buffer);
 			renderer_.end_frame();
 		}
@@ -143,20 +127,27 @@ void first_app::run()
 	vkDeviceWaitIdle(device_.device());
 }
 
-void first_app::load_gameobjects(coral_descriptor_set_layout& material_set_layout)
+void first_app::load_gameobjects(coral_descriptor_set_layout& material_set_layout, VkPipelineLayout pipeline_layout)
 {
-#pragma region Sponza
-    std::shared_ptr<coral_mesh> sponza_mesh{ coral_mesh::create_mesh_from_file(device_, "assets/meshes/Sponza/Sponza.gltf") };
+    auto sponza_scene{std::make_shared<coral_gameobject>(coral_gameobject::create_gameobject()) };
+
+    std::shared_ptr<coral_mesh> sponza_mesh{ coral_mesh::create_mesh_from_file(device_, "assets/meshes/Sponza/Sponza.gltf", sponza_scene.get()) };
     sponza_mesh->load_materials(material_set_layout, *descriptor_pool_);
     sponza_mesh->create_pipelines(
             "assets/shaders/simple_shader.vert.spv",
             "assets/shaders/simple_shader.frag.spv",
             renderer_.get_swapchain_render_pass(),
-            pipeline_layout_);
+            pipeline_layout);
+
+    sponza_scene->mesh_ = sponza_mesh;
+    gameobjects_.emplace(sponza_scene->get_id(), sponza_scene);
 
-    auto sponza_scene{ coral_gameobject::create_gameobject() };
-    sponza_scene.mesh_ = sponza_mesh;
-    gameobjects_.emplace(sponza_scene.get_id(), std::move(sponza_scene));
+    // LIGHTS
+    auto point_light = std::make_shared<coral_gameobject>(coral_gameobject::create_point_light(1.f));
+    point_light->transform_.translation = glm::vec3(0.f, 1.f, -0.35f);
+    gameobjects_.emplace(point_light->get_id(), point_light);
 
-#pragma endregion
+    point_light = std::make_shared<coral_gameobject>(coral_gameobject::create_point_light(1.f, 0.1f, {1.f, 0.2f, 0.14f}));
+    point_light->transform_.translation = glm::vec3(5.f, 1.f, -0.35f);
+    gameobjects_.emplace(point_light->get_id(), point_light);
 }

+ 1 - 3
coral_renderer/first_app.h

@@ -27,14 +27,12 @@ namespace coral_3d
 		void run();
 
 	private:
-		void load_gameobjects(coral_descriptor_set_layout& material_set_layout);
+		void load_gameobjects(coral_descriptor_set_layout& material_set_layout, VkPipelineLayout pipeline_layout);
 
 		coral_window window_{ WIDTH, HEIGHT, "Coral Renderer" };
 		coral_device device_{ window_ };
 		coral_renderer renderer_{ window_, device_ };
 
-        VkPipelineLayout pipeline_layout_{};
-
 		std::unique_ptr<coral_descriptor_pool> descriptor_pool_{};
 		coral_gameobject::Map gameobjects_;
 	};

+ 107 - 0
coral_renderer/point_light_system.cpp

@@ -0,0 +1,107 @@
+#include "point_light_system.h"
+#include "vk_initializers.h"
+
+using namespace coral_3d;
+
+struct PointLightPushConstant
+{
+    glm::vec4 position{}; // w is radius
+    glm::vec4 color{}; // w is intensity
+};
+
+point_light_system::point_light_system(coral_device& device, VkRenderPass render_pass,  std::vector<VkDescriptorSetLayout>& desc_set_layouts)
+        : device_{device}
+{
+    create_pipeline_layout(device_, desc_set_layouts);
+    create_pipeline(render_pass);
+}
+
+point_light_system::~point_light_system()
+{
+    vkDestroyPipelineLayout(device_.device(), pipeline_layout_, nullptr);
+}
+
+void point_light_system::update(FrameInfo &frame_info, GlobalUBO &ubo)
+{
+    int light_index{0};
+    for(auto& kv: frame_info.gameobjects)
+    {
+        auto& obj = kv.second;
+        if(obj->point_light_ == nullptr) continue;
+
+        // Copy light to UBO
+        ubo.point_lights[light_index].position = glm::vec4(obj->transform_.translation, obj->transform_.scale.x);
+        ubo.point_lights[light_index].color = obj->point_light_->color;
+
+        light_index++;
+    }
+    ubo.num_lights = light_index;
+}
+
+void point_light_system::render(FrameInfo& frame_info)
+{
+    pipeline_->bind(frame_info.command_buffer);
+
+    vkCmdBindDescriptorSets(
+            frame_info.command_buffer,
+            VK_PIPELINE_BIND_POINT_GRAPHICS,
+            pipeline_layout_,
+            0, 1,
+            &frame_info.global_descriptor_set,
+            0, nullptr
+    );
+
+    for(auto& kv: frame_info.gameobjects)
+    {
+        auto &obj = kv.second;
+        if (obj->point_light_ == nullptr) continue;
+
+        PointLightPushConstant push_constant{};
+        push_constant.position = glm::vec4(obj->transform_.translation, obj->transform_.scale.x);
+        push_constant.color = obj->point_light_->color;
+
+        vkCmdPushConstants(
+                frame_info.command_buffer,
+                pipeline_layout_,
+                VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
+                0, sizeof (PointLightPushConstant),
+                &push_constant
+                );
+
+        vkCmdDraw(frame_info.command_buffer, 6, 1, 0, 0);
+    }
+}
+
+void point_light_system::create_pipeline_layout(coral_device &device, std::vector<VkDescriptorSetLayout>& desc_set_layouts)
+{
+    VkPushConstantRange push_constant_range{};
+    push_constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
+    push_constant_range.offset = 0;
+    push_constant_range.size = sizeof(PointLightPushConstant);
+
+    VkPipelineLayoutCreateInfo layout_info{ vkinit::pipeline_layout_ci() };
+    layout_info.pushConstantRangeCount = 1;
+    layout_info.pPushConstantRanges = &push_constant_range;
+    layout_info.setLayoutCount = static_cast<uint32_t>(desc_set_layouts.size());
+    layout_info.pSetLayouts = desc_set_layouts.data();
+
+    if (vkCreatePipelineLayout(device.device(), &layout_info, nullptr, &pipeline_layout_) != VK_SUCCESS)
+        throw std::runtime_error("ERROR! coral_pipeline::create_pipeline_layout() >> Failed to create pipeline layout!");
+}
+
+void point_light_system::create_pipeline(VkRenderPass render_pass)
+{
+    PipelineConfigInfo config_info{};
+    coral_pipeline::default_pipeline_config_info(config_info);
+    config_info.binding_descriptions.clear();
+    config_info.attribute_descriptions.clear();
+    config_info.render_pass = render_pass;
+    config_info.pipeline_layout = pipeline_layout_;
+
+    pipeline_ = std::make_unique<coral_pipeline>(
+            device_,
+            "assets/shaders/point_light.vert.spv",
+            "assets/shaders/point_light.frag.spv",
+            config_info
+            );
+}

+ 41 - 0
coral_renderer/point_light_system.h

@@ -0,0 +1,41 @@
+#pragma once
+
+// CORAL
+#include "coral_camera.h"
+#include "coral_device.h"
+#include "coral_pipeline.h"
+#include "coral_gameobject.h"
+#include "coral_frame_info.h"
+#include "coral_descriptors.h"
+
+// STD
+#include <memory>
+#include <vector>
+
+namespace coral_3d
+{
+    class point_light_system final
+    {
+    public:
+        point_light_system(coral_device& device, VkRenderPass render_pass, std::vector<VkDescriptorSetLayout>& desc_set_layouts);
+        ~point_light_system();
+
+        point_light_system(const point_light_system&) = delete;
+        point_light_system& operator=(const point_light_system&) = delete;
+
+        void update(FrameInfo& frame_info, GlobalUBO& ubo);
+        void render(FrameInfo& frame_info);
+
+        VkPipelineLayout pipeline_layout() const { return pipeline_layout_; }
+        VkPipeline pipeline() const { return pipeline_->pipeline(); }
+
+    private:
+        void create_pipeline_layout(coral_device &device, std::vector<VkDescriptorSetLayout>& desc_set_layouts);
+        void create_pipeline(VkRenderPass render_pass);
+
+        coral_device& device_;
+
+        std::unique_ptr<coral_pipeline> pipeline_;
+        VkPipelineLayout pipeline_layout_;
+    };
+}

+ 24 - 8
coral_renderer/render_system.cpp

@@ -1,15 +1,14 @@
 #include "render_system.h"
-
 #include "vk_initializers.h"
-#include <stdexcept>
-#include <utility>
 
 using namespace coral_3d;
 
-render_system::render_system(coral_device& device, VkPipelineLayout pipeline_layout)
+render_system::render_system(coral_device& device, std::vector<VkDescriptorSetLayout>& desc_set_layouts)
 	: device_{device}
-    , pipeline_layout_ {pipeline_layout}
-{}
+    , pipeline_layout_{VK_NULL_HANDLE}
+{
+    create_pipeline_layout(device_, desc_set_layouts);
+}
 
 render_system::~render_system()
 {
@@ -30,8 +29,25 @@ void render_system::render_gameobjects(FrameInfo& frame_info)
 	for (auto& kv : frame_info.gameobjects)
 	{
 		auto& obj{ kv.second };
-		if (obj.mesh_ == nullptr) continue;
+		if (obj->mesh_ == nullptr) continue;
 
-		obj.mesh_->draw(frame_info.command_buffer, pipeline_layout_);
+		obj->mesh_->draw(frame_info.command_buffer, pipeline_layout_);
 	}
+}
+
+void render_system::create_pipeline_layout(coral_device &device, std::vector<VkDescriptorSetLayout>& desc_set_layouts)
+{
+    VkPushConstantRange push_constant_range{};
+    push_constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
+    push_constant_range.offset = 0;
+    push_constant_range.size = sizeof(PushConstant);
+
+    VkPipelineLayoutCreateInfo layout_info{ vkinit::pipeline_layout_ci() };
+    layout_info.pushConstantRangeCount = 1;
+    layout_info.pPushConstantRanges = &push_constant_range;
+    layout_info.setLayoutCount = static_cast<uint32_t>(desc_set_layouts.size());
+    layout_info.pSetLayouts = desc_set_layouts.data();
+
+    if (vkCreatePipelineLayout(device.device(), &layout_info, nullptr, &pipeline_layout_) != VK_SUCCESS)
+        throw std::runtime_error("ERROR! coral_pipeline::create_pipeline_layout() >> Failed to create pipeline layout!");
 }

+ 2 - 1
coral_renderer/render_system.h

@@ -18,7 +18,7 @@ namespace coral_3d
 	class render_system final
 	{
 	public:
-		render_system(coral_device& device, VkPipelineLayout pipeline_layout);
+		render_system(coral_device& device, std::vector<VkDescriptorSetLayout>& desc_set_layouts);
 		~render_system();
 
 		render_system(const render_system&) = delete;
@@ -30,6 +30,7 @@ namespace coral_3d
 		VkPipeline pipeline() const { return pipeline_->pipeline(); }
 
 	private:
+        void create_pipeline_layout(coral_device& device, std::vector<VkDescriptorSetLayout>& desc_set_layouts);
 
 		coral_device& device_;
 

+ 0 - 25
shaders/PosNormCol.frag

@@ -1,25 +0,0 @@
-//glsl version 4.5
-#version 450
-
-//shader input
-layout (location = 0) in vec3 inColor;
-layout (location = 1) in vec2 texCoord;
-
-//output write
-layout (location = 0) out vec4 outFragColor;
-
-layout(set = 0, binding = 1) uniform  SceneData{
-	vec4 fogColor; // w is for exponent
-	vec4 fogDistances; //x for min, y for max, zw unused.
-	vec4 ambientColor;
-	vec4 sunlightDirection; //w for sun power
-	vec4 sunlightColor;
-} sceneData;
-
-layout(set = 2, binding = 0) uniform sampler2D samp;
-
-void main()
-{
-	vec3 color = texture(samp, texCoord).xyz;
-	outFragColor = vec4(color ,1.0f);
-}

+ 0 - 35
shaders/PosNormCol.vert

@@ -1,35 +0,0 @@
-#version 460
-
-layout (location = 0) in vec3 vPosition;
-layout (location = 1) in vec3 vNormal;
-layout (location = 2) in vec3 vColor;
-layout (location = 3) in vec2 vTexCoord;
-
-layout (location = 0) out vec3 outColor;
-layout (location = 1) out vec2 texCoord;
-
-layout(set = 0, binding = 0) uniform CameraBuffer
-{
-	mat4 view;
-	mat4 projection;
-	mat4 viewProj;
-	mat4 viewInv;
-} cameraData;
-
-struct ObjectData
-{
-	mat4 world;
-};
-
-layout(std140, set = 1, binding = 0) readonly buffer ObjectBuffer
-{
-	ObjectData objects[];
-} objectBuffer;
-
-void main()
-{
-	mat4 wvp = cameraData.viewProj * objectBuffer.objects[gl_InstanceIndex].world;
-    gl_Position = wvp * vec4(vPosition, 1.0);
-    outColor = vec3(0.1f, 0.8f, 0.1f);
-	texCoord = vTexCoord;
-}

BIN
shaders/compiled/PosNormCol.frag.spv


BIN
shaders/compiled/PosNormCol.vert.spv


BIN
shaders/compiled/point_light.frag.spv


BIN
shaders/compiled/point_light.vert.spv


BIN
shaders/compiled/simple_shader.frag.spv


BIN
shaders/compiled/simple_shader.vert.spv


+ 41 - 0
shaders/point_light.frag

@@ -0,0 +1,41 @@
+#version 450
+
+layout(location = 0) in vec2 frag_offset;
+layout(location = 0) out vec4 out_color;
+
+struct PointLight
+{
+    vec4 position; // w is radius
+    vec4 color; // w is intensity
+};
+
+layout (set = 0, binding = 0) uniform GlobalUBO
+{
+// MATRICES
+    mat4 view;
+    mat4 viewInverse;
+    mat4 viewProjection;
+
+// LIGHTING
+    vec4 globalLightDirection;
+    vec4 ambientLighting;
+
+// POINT LIGHTS
+    PointLight pointLights[8];
+    int numLights;
+} ubo;
+
+layout(push_constant) uniform Push
+{
+    vec4 position; // w is radius
+    vec4 color; // w is intensity
+} push;
+
+void main()
+{
+    float dist = sqrt(dot(frag_offset, frag_offset));
+    if(dist >= 1.f)
+        discard;
+
+    out_color = vec4(push.color.xyz, 1.f);
+}

+ 54 - 0
shaders/point_light.vert

@@ -0,0 +1,54 @@
+#version 450
+
+const vec2 OFFSETS[6] = vec2[]
+(
+    vec2(-1.f, -1.f),
+    vec2(-1.f, 1.f),
+    vec2(1.f, -1.f),
+    vec2(1.f, -1.f),
+    vec2(-1.f, 1.f),
+    vec2(1.f, 1.f)
+);
+
+layout (location = 0) out vec2 frag_offset;
+
+struct PointLight
+{
+    vec4 position; // w is radius
+    vec4 color; // w is intensity
+};
+
+layout (set = 0, binding = 0) uniform GlobalUBO
+{
+// MATRICES
+    mat4 view;
+    mat4 viewInverse;
+    mat4 viewProjection;
+
+// LIGHTING
+    vec4 globalLightDirection;
+    vec4 ambientLighting;
+
+// POINT LIGHTS
+    PointLight pointLights[8];
+    int numLights;
+} ubo;
+
+layout(push_constant) uniform Push
+{
+    vec4 position; // w is radius
+    vec4 color; // w is intensity
+} push;
+
+void main()
+{
+    frag_offset = OFFSETS[gl_VertexIndex];
+    vec3 cam_world_right = {ubo.view[0][0], ubo.view[1][0], ubo.view[2][0]};
+    vec3 cam_world_up = {ubo.view[0][1], ubo.view[1][1], ubo.view[2][1]};
+
+    vec3 world_pos = push.position.xyz
+    + push.position.w * frag_offset.x * cam_world_right
+    + push.position.w * frag_offset.y * cam_world_up;
+
+    gl_Position = ubo.viewProjection * vec4(world_pos, 1.f);
+}

+ 1 - 1
shaders/simple_shader.frag

@@ -36,7 +36,7 @@ layout (set = 0, binding = 0) uniform GlobalUBO
 
 	// POINT LIGHTS
 	PointLight pointLights[8];
-	float numLights;
+	int numLights;
 } ubo;
 
 // OUT COLOR

+ 2 - 2
shaders/simple_shader.vert

@@ -32,7 +32,7 @@ layout (set = 0, binding = 0) uniform GlobalUBO
 
 	// POINT LIGHTS
 	PointLight pointLights[8];
-	float numLights;
+	int numLights;
 } ubo;
 
 layout (push_constant) uniform Push
@@ -51,7 +51,7 @@ void main()
 	// TBN
 	vec3 T = normalize(mat3(primitive.model) * inTangent.xyz);
 	vec3 N = normalize(mat3(primitive.model) * inNormal);
-	// T = normalize(T - dot(T, N) * N);
+	T = normalize(T - dot(T, N) * N);
 	vec3 B = cross(N, T) * inTangent.w;
 
 	vs_out.TBN = mat3(T, B, N);

Some files were not shown because too many files changed in this diff