From ab2bdfbd0e9ba21f7fb56f950a474f88629bd6d6 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Fri, 26 Apr 2024 19:32:38 +0200 Subject: [PATCH] THE STREET FINALLY RENDERS --- res/shaders/BasePass.slang | 2 +- res/shaders/lib/Material.slang | 12 +++++------- src/Editor/Asset/MeshLoader.cpp | 19 ++++++++++++++----- src/Editor/main.cpp | 1 + src/Engine/Graphics/RenderPass/DebugPass.cpp | 1 - .../Graphics/RenderPass/LightCullingPass.cpp | 2 -- .../Graphics/RenderPass/SkyboxRenderPass.cpp | 1 - src/Engine/Graphics/RenderPass/TextPass.cpp | 10 +++++----- src/Engine/Graphics/RenderPass/UIPass.cpp | 9 +++++---- src/Engine/Graphics/Shader.cpp | 11 +---------- src/Engine/Graphics/slang-compile.cpp | 8 ++------ src/Engine/Material/Material.cpp | 5 +++-- 12 files changed, 37 insertions(+), 44 deletions(-) diff --git a/res/shaders/BasePass.slang b/res/shaders/BasePass.slang index 53e6b65..2b1d37f 100644 --- a/res/shaders/BasePass.slang +++ b/res/shaders/BasePass.slang @@ -1,7 +1,7 @@ import Common; import LightEnv; -import Material; import MaterialParameter; +import MATERIAL_FILE_NAME; struct LightCullingData { diff --git a/res/shaders/lib/Material.slang b/res/shaders/lib/Material.slang index 1946341..5ffd3ed 100644 --- a/res/shaders/lib/Material.slang +++ b/res/shaders/lib/Material.slang @@ -2,10 +2,8 @@ import Common; import BRDF; import MaterialParameter; -interface IMaterial -{ - associatedtype BRDF : IBRDF; - BRDF prepare(MaterialParameter input); -}; -layout(set=4) -ParameterBlock pMaterial; +//interface IMaterial +//{ +// associatedtype BRDF : IBRDF; +// BRDF prepare(MaterialParameter input); +//}; diff --git a/src/Editor/Asset/MeshLoader.cpp b/src/Editor/Asset/MeshLoader.cpp index 6830eea..2a61532 100644 --- a/src/Editor/Asset/MeshLoader.cpp +++ b/src/Editor/Asset/MeshLoader.cpp @@ -77,14 +77,19 @@ void MeshLoader::loadMaterials(const aiScene* scene, const std::string& baseName }); matCode["params"]["diffuseTexture"] = { - {"type", "Sampler2D"}, + {"type", "Texture2D"}, {"default", fmt::format("{0}/{1}", importPath, texFilename.string())} }; + matCode["params"]["diffuseSampler"] = + { + {"type", "Sampler"} + }; matCode["code"].push_back( { { "exp", "Sample" }, - { "sampler", "diffuseTexture" }, - { "coords", "input.texCoords"} + { "texture", "diffuseTexture" }, + { "sampler", "diffuseSampler" }, + { "coords", "input.texCoords" } } ); ++codeIndex; @@ -117,13 +122,17 @@ void MeshLoader::loadMaterials(const aiScene* scene, const std::string& baseName }); matCode["params"]["normalTexture"] = { - {"type", "Sampler2D"}, + {"type", "Texture2D"}, {"default", fmt::format("{0}/{1}", importPath, texFilename.string())} }; + matCode["params"]["normalSampler"] = { + {"type", "Sampler"}, + }; matCode["code"].push_back( { { "exp", "Sample" }, - { "sampler", "normalTexture" }, + { "texture", "normalTexture" }, + { "sampler", "normalSampler" }, { "coords", "input.texCoords" } } ); diff --git a/src/Editor/main.cpp b/src/Editor/main.cpp index c3d7407..12fe82d 100644 --- a/src/Editor/main.cpp +++ b/src/Editor/main.cpp @@ -48,6 +48,7 @@ int main() { graphics->init(initializer); StaticMeshVertexData* vd = StaticMeshVertexData::getInstance(); vd->init(graphics); + OWindowManager windowManager = new WindowManager(); AssetRegistry::init(sourcePath / "Assets", graphics); AssetImporter::init(graphics); diff --git a/src/Engine/Graphics/RenderPass/DebugPass.cpp b/src/Engine/Graphics/RenderPass/DebugPass.cpp index f57f647..4552ca0 100644 --- a/src/Engine/Graphics/RenderPass/DebugPass.cpp +++ b/src/Engine/Graphics/RenderPass/DebugPass.cpp @@ -126,7 +126,6 @@ void DebugPass::createRenderPass() ShaderCreateInfo createInfo = { .name = "DebugVertex", .mainModule = "Debug", - .additionalModules = { "Debug" }, .entryPoint = "vertexMain", }; vertexShader = graphics->createVertexShader(createInfo); diff --git a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp index 263e322..03cfd9f 100644 --- a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp +++ b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp @@ -127,7 +127,6 @@ void LightCullingPass::publishOutputs() ShaderCreateInfo createInfo = { .name = "Culling", .mainModule = "LightCulling", - .additionalModules = {"LightCulling"}, .entryPoint = "cullLights", .rootSignature = cullingLayout, }; @@ -215,7 +214,6 @@ void LightCullingPass::setupFrustums() ShaderCreateInfo createInfo = { .name = "Frustum", .mainModule = "ComputeFrustums", - .additionalModules = {"ComputeFrustums"}, .entryPoint = "computeFrustums", .rootSignature = frustumLayout, }; diff --git a/src/Engine/Graphics/RenderPass/SkyboxRenderPass.cpp b/src/Engine/Graphics/RenderPass/SkyboxRenderPass.cpp index 61fe90b..c59c44a 100644 --- a/src/Engine/Graphics/RenderPass/SkyboxRenderPass.cpp +++ b/src/Engine/Graphics/RenderPass/SkyboxRenderPass.cpp @@ -113,7 +113,6 @@ void SkyboxRenderPass::createRenderPass() ShaderCreateInfo createInfo = { .name = "SkyboxVertex", .mainModule = "Skybox", - .additionalModules = {"Skybox"}, .entryPoint = "vertexMain", }; vertexShader = graphics->createVertexShader(createInfo); diff --git a/src/Engine/Graphics/RenderPass/TextPass.cpp b/src/Engine/Graphics/RenderPass/TextPass.cpp index 9a15c8c..1a6e1c2 100644 --- a/src/Engine/Graphics/RenderPass/TextPass.cpp +++ b/src/Engine/Graphics/RenderPass/TextPass.cpp @@ -110,11 +110,11 @@ void TextPass::createRenderPass() renderTarget = resources->requestRenderTarget("UIPASS_COLOR"); depthAttachment = resources->requestRenderTarget("UIPASS_DEPTH"); - ShaderCreateInfo createInfo; - createInfo.mainModule = "TextPass"; - createInfo.defines["INDEX_VIEW_PARAMS"] = "0"; - createInfo.name = "TextVertex"; - createInfo.entryPoint = "vertexMain"; + ShaderCreateInfo createInfo = { + .name = "TextVertex", + .mainModule = "TextPass", + .entryPoint = "vertexMain", + }; vertexShader = graphics->createVertexShader(createInfo); createInfo.name = "TextFragment"; diff --git a/src/Engine/Graphics/RenderPass/UIPass.cpp b/src/Engine/Graphics/RenderPass/UIPass.cpp index 5e67ee9..9931e60 100644 --- a/src/Engine/Graphics/RenderPass/UIPass.cpp +++ b/src/Engine/Graphics/RenderPass/UIPass.cpp @@ -96,10 +96,11 @@ void UIPass::publishOutputs() void UIPass::createRenderPass() { - ShaderCreateInfo createInfo; - createInfo.mainModule = "UIPass"; - createInfo.name = "UIVertex"; - createInfo.entryPoint = "vertexMain"; + ShaderCreateInfo createInfo = { + .name = "UIVertex", + .mainModule = "UIPass", + .entryPoint = "vertexMain", + }; vertexShader = graphics->createVertexShader(createInfo); createInfo.name = "UIFragment"; diff --git a/src/Engine/Graphics/Shader.cpp b/src/Engine/Graphics/Shader.cpp index 1dbea30..f234549 100644 --- a/src/Engine/Graphics/Shader.cpp +++ b/src/Engine/Graphics/Shader.cpp @@ -111,19 +111,10 @@ void ShaderCompiler::createShaders(ShaderPermutation permutation, Gfx::OPipeline if (std::strlen(permutation.materialName) > 0) { createInfo.additionalModules.add(permutation.materialName); - createInfo.typeParameter.add(Pair("IMaterial", permutation.materialName)); + createInfo.defines["MATERIAL_FILE_NAME"] = permutation.materialName; } createInfo.typeParameter.add({ Pair("IVertexData", permutation.vertexDataName) }); createInfo.additionalModules.add(permutation.vertexDataName); - createInfo.additionalModules.add(permutation.vertexMeshFile); - if (permutation.hasFragment) - { - createInfo.additionalModules.add(permutation.fragmentFile); - } - if (permutation.hasTaskShader) - { - createInfo.additionalModules.add(permutation.taskFile); - } if (permutation.useMeshShading) { diff --git a/src/Engine/Graphics/slang-compile.cpp b/src/Engine/Graphics/slang-compile.cpp index bcd99f4..5401a33 100644 --- a/src/Engine/Graphics/slang-compile.cpp +++ b/src/Engine/Graphics/slang-compile.cpp @@ -52,17 +52,13 @@ Slang::ComPtr Seele::generateShader(const ShaderCreateInfo& create Slang::ComPtr diagnostics; Array modules; Slang::ComPtr entrypoint; - slang::IModule* mainModule = nullptr; for (const auto& moduleName : createInfo.additionalModules) { modules.add(session->loadModule(moduleName.c_str(), diagnostics.writeRef())); - if (moduleName == createInfo.mainModule) - { - mainModule = (slang::IModule*)modules.back(); - } CHECK_DIAGNOSTICS(); } - + slang::IModule* mainModule = session->loadModule(createInfo.mainModule.c_str(), diagnostics.writeRef()); + modules.add(mainModule); CHECK_DIAGNOSTICS(); mainModule->findEntryPointByName(createInfo.entryPoint.c_str(), entrypoint.writeRef()); diff --git a/src/Engine/Material/Material.cpp b/src/Engine/Material/Material.cpp index 0b6f4c9..1f82fe6 100644 --- a/src/Engine/Material/Material.cpp +++ b/src/Engine/Material/Material.cpp @@ -114,10 +114,9 @@ void Material::load(ArchiveBuffer& buffer) void Material::compile() { std::ofstream codeStream("./shaders/generated/"+materialName+".slang"); - codeStream << "import Material;\n"; codeStream << "import BRDF;\n"; codeStream << "import MaterialParameter;\n"; - codeStream << "struct " << materialName << " : IMaterial {\n"; + codeStream << "struct " << materialName << "{\n"; for(const auto& parameter : parameters) { PShaderParameter handle = PShaderExpression(*codeExpressions.find([¶meter](const OShaderExpression& exp) {return exp->key == parameter; })); @@ -139,5 +138,7 @@ void Material::compile() codeStream << "\t\treturn result;\n"; codeStream << "\t}\n"; codeStream << "};\n"; + codeStream << "layout(set=4)"; + codeStream << "ParameterBlock<" << materialName << "> pMaterial;"; graphics->getShaderCompiler()->registerMaterial(this); }