Skip to content

Commit dc53bb5

Browse files
committed
WIP: now using Viewport
- Also using GPU-Driven Draw Calls - Can now ReloadShaders - Base for maybe future forward/deferred project - MeshCulling
1 parent 366345f commit dc53bb5

21 files changed

Lines changed: 864 additions & 239 deletions

Core/Source/Lux/Project/Project.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "Lux/Asset/AssetManager/RuntimeAssetManager.h"
1010
#include "Lux/Core/Base.h"
1111
#include "Lux/Core/Ref.h"
12+
#include "Lux/Renderer/RendererTypes.h"
1213

1314
#include <glm/glm.hpp>
1415

@@ -68,6 +69,7 @@ namespace Lux
6869
bool EnableAutoSave = false;
6970
int AutoSaveIntervalSeconds = 300;
7071
PhysicsAPIType CurrentPhysicsAPI = PhysicsAPIType::Box2D;
72+
RenderingTechnique RendererTechnique = RenderingTechnique::Forward;
7173

7274
std::string ProjectFileName;
7375
std::filesystem::path ProjectDirectory;

Core/Source/Lux/Project/ProjectSerializer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ namespace Lux
138138
out << YAML::Key << "AutomaticallyReloadAssembly" << YAML::Value << config.AutomaticallyReloadAssembly;
139139
out << YAML::Key << "AutoSave" << YAML::Value << config.EnableAutoSave;
140140
out << YAML::Key << "AutoSaveInterval" << YAML::Value << config.AutoSaveIntervalSeconds;
141+
out << YAML::Key << "RenderingTechnique" << YAML::Value << RenderingTechniqueToString(config.RendererTechnique);
141142

142143
out << YAML::Key << "Audio" << YAML::Value;
143144
{
@@ -319,6 +320,14 @@ namespace Lux
319320
config.AutomaticallyReloadAssembly = projectNode["AutomaticallyReloadAssembly"].as<bool>(true);
320321
config.EnableAutoSave = projectNode["AutoSave"].as<bool>(false);
321322
config.AutoSaveIntervalSeconds = projectNode["AutoSaveInterval"].as<int>(300);
323+
config.RendererTechnique = RenderingTechnique::Forward;
324+
if (auto renderingTechniqueNode = projectNode["RenderingTechnique"])
325+
{
326+
if (renderingTechniqueNode.IsScalar() && !IsNumericString(renderingTechniqueNode.Scalar()))
327+
config.RendererTechnique = RenderingTechniqueFromString(renderingTechniqueNode.as<std::string>());
328+
else
329+
config.RendererTechnique = renderingTechniqueNode.as<int>((int)RenderingTechnique::Forward) == (int)RenderingTechnique::Deferred ? RenderingTechnique::Deferred : RenderingTechnique::Forward;
330+
}
322331
config.StartScene.clear();
323332
config.StartSceneHandle = 0;
324333

Core/Source/Lux/Renderer/Renderer.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ namespace Lux {
398398
// Light-culling
399399
Renderer::GetShaderLibrary()->Load("Resources/Shaders/PreDepth.glsl");
400400
Renderer::GetShaderLibrary()->Load("Resources/Shaders/PreDepth_Anim.glsl");
401+
Renderer::GetShaderLibrary()->Load("Resources/Shaders/MeshCulling.glsl");
401402
Renderer::GetShaderLibrary()->Load("Resources/Shaders/LightCulling.glsl");
402403

403404
// Renderer2D Shaders
@@ -595,6 +596,24 @@ namespace Lux {
595596
return s_Data->m_ShaderLibrary;
596597
}
597598

599+
uint32_t Renderer::ReloadShaders(bool forceCompile)
600+
{
601+
if (!s_Data || !s_Data->m_ShaderLibrary)
602+
return 0;
603+
604+
uint32_t reloadedCount = 0;
605+
for (auto& [name, shader] : s_Data->m_ShaderLibrary->GetShaders())
606+
{
607+
if (!shader)
608+
continue;
609+
610+
shader->Reload(forceCompile);
611+
reloadedCount++;
612+
}
613+
614+
return reloadedCount;
615+
}
616+
598617
void Renderer::RenderThreadFunc(RenderThread* renderThread)
599618
{
600619
LUX_PROFILE_THREAD("Render Thread");

Core/Source/Lux/Renderer/Renderer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ namespace Lux {
198198
static void AcknowledgeParsedGlobalMacros(const std::unordered_set<std::string>& macros, Ref<Shader> shader);
199199
static void SetMacroInShader(Ref<Shader> shader, const std::string& name, const std::string& value = "");
200200
static void SetGlobalMacroInShaders(const std::string& name, const std::string& value = "");
201+
static uint32_t ReloadShaders(bool forceCompile = true);
201202
// Returns true if any shader is actually updated.
202203
static bool UpdateDirtyShaders();
203204

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,37 @@
11
#pragma once
22

33
#include <cstdint>
4+
#include <string_view>
45

56
namespace Lux {
67

78
using RendererID = uint32_t;
89

10+
enum class RenderingTechnique : uint8_t
11+
{
12+
Forward = 0,
13+
Deferred = 1
14+
};
15+
16+
inline const char* RenderingTechniqueToString(RenderingTechnique technique)
17+
{
18+
switch (technique)
19+
{
20+
case RenderingTechnique::Forward: return "Forward";
21+
case RenderingTechnique::Deferred: return "Deferred";
22+
}
23+
24+
return "Forward";
25+
}
26+
27+
inline RenderingTechnique RenderingTechniqueFromString(std::string_view value)
28+
{
29+
if (value == "Forward" || value == "forward")
30+
return RenderingTechnique::Forward;
31+
if (value == "Deferred" || value == "deferred")
32+
return RenderingTechnique::Deferred;
33+
34+
return RenderingTechnique::Forward;
35+
}
36+
937
}

0 commit comments

Comments
 (0)