THE STREET FINALLY RENDERS

This commit is contained in:
Dynamitos
2024-04-26 19:32:38 +02:00
parent 93ab9e38f0
commit ab2bdfbd0e
12 changed files with 37 additions and 44 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
import Common; import Common;
import LightEnv; import LightEnv;
import Material;
import MaterialParameter; import MaterialParameter;
import MATERIAL_FILE_NAME;
struct LightCullingData struct LightCullingData
{ {
+5 -7
View File
@@ -2,10 +2,8 @@ import Common;
import BRDF; import BRDF;
import MaterialParameter; import MaterialParameter;
interface IMaterial //interface IMaterial
{ //{
associatedtype BRDF : IBRDF; // associatedtype BRDF : IBRDF;
BRDF prepare(MaterialParameter input); // BRDF prepare(MaterialParameter input);
}; //};
layout(set=4)
ParameterBlock<IMaterial> pMaterial;
+13 -4
View File
@@ -77,13 +77,18 @@ void MeshLoader::loadMaterials(const aiScene* scene, const std::string& baseName
}); });
matCode["params"]["diffuseTexture"] = matCode["params"]["diffuseTexture"] =
{ {
{"type", "Sampler2D"}, {"type", "Texture2D"},
{"default", fmt::format("{0}/{1}", importPath, texFilename.string())} {"default", fmt::format("{0}/{1}", importPath, texFilename.string())}
}; };
matCode["params"]["diffuseSampler"] =
{
{"type", "Sampler"}
};
matCode["code"].push_back( matCode["code"].push_back(
{ {
{ "exp", "Sample" }, { "exp", "Sample" },
{ "sampler", "diffuseTexture" }, { "texture", "diffuseTexture" },
{ "sampler", "diffuseSampler" },
{ "coords", "input.texCoords" } { "coords", "input.texCoords" }
} }
); );
@@ -117,13 +122,17 @@ void MeshLoader::loadMaterials(const aiScene* scene, const std::string& baseName
}); });
matCode["params"]["normalTexture"] = matCode["params"]["normalTexture"] =
{ {
{"type", "Sampler2D"}, {"type", "Texture2D"},
{"default", fmt::format("{0}/{1}", importPath, texFilename.string())} {"default", fmt::format("{0}/{1}", importPath, texFilename.string())}
}; };
matCode["params"]["normalSampler"] = {
{"type", "Sampler"},
};
matCode["code"].push_back( matCode["code"].push_back(
{ {
{ "exp", "Sample" }, { "exp", "Sample" },
{ "sampler", "normalTexture" }, { "texture", "normalTexture" },
{ "sampler", "normalSampler" },
{ "coords", "input.texCoords" } { "coords", "input.texCoords" }
} }
); );
+1
View File
@@ -48,6 +48,7 @@ int main() {
graphics->init(initializer); graphics->init(initializer);
StaticMeshVertexData* vd = StaticMeshVertexData::getInstance(); StaticMeshVertexData* vd = StaticMeshVertexData::getInstance();
vd->init(graphics); vd->init(graphics);
OWindowManager windowManager = new WindowManager(); OWindowManager windowManager = new WindowManager();
AssetRegistry::init(sourcePath / "Assets", graphics); AssetRegistry::init(sourcePath / "Assets", graphics);
AssetImporter::init(graphics); AssetImporter::init(graphics);
@@ -126,7 +126,6 @@ void DebugPass::createRenderPass()
ShaderCreateInfo createInfo = { ShaderCreateInfo createInfo = {
.name = "DebugVertex", .name = "DebugVertex",
.mainModule = "Debug", .mainModule = "Debug",
.additionalModules = { "Debug" },
.entryPoint = "vertexMain", .entryPoint = "vertexMain",
}; };
vertexShader = graphics->createVertexShader(createInfo); vertexShader = graphics->createVertexShader(createInfo);
@@ -127,7 +127,6 @@ void LightCullingPass::publishOutputs()
ShaderCreateInfo createInfo = { ShaderCreateInfo createInfo = {
.name = "Culling", .name = "Culling",
.mainModule = "LightCulling", .mainModule = "LightCulling",
.additionalModules = {"LightCulling"},
.entryPoint = "cullLights", .entryPoint = "cullLights",
.rootSignature = cullingLayout, .rootSignature = cullingLayout,
}; };
@@ -215,7 +214,6 @@ void LightCullingPass::setupFrustums()
ShaderCreateInfo createInfo = { ShaderCreateInfo createInfo = {
.name = "Frustum", .name = "Frustum",
.mainModule = "ComputeFrustums", .mainModule = "ComputeFrustums",
.additionalModules = {"ComputeFrustums"},
.entryPoint = "computeFrustums", .entryPoint = "computeFrustums",
.rootSignature = frustumLayout, .rootSignature = frustumLayout,
}; };
@@ -113,7 +113,6 @@ void SkyboxRenderPass::createRenderPass()
ShaderCreateInfo createInfo = { ShaderCreateInfo createInfo = {
.name = "SkyboxVertex", .name = "SkyboxVertex",
.mainModule = "Skybox", .mainModule = "Skybox",
.additionalModules = {"Skybox"},
.entryPoint = "vertexMain", .entryPoint = "vertexMain",
}; };
vertexShader = graphics->createVertexShader(createInfo); vertexShader = graphics->createVertexShader(createInfo);
+5 -5
View File
@@ -110,11 +110,11 @@ void TextPass::createRenderPass()
renderTarget = resources->requestRenderTarget("UIPASS_COLOR"); renderTarget = resources->requestRenderTarget("UIPASS_COLOR");
depthAttachment = resources->requestRenderTarget("UIPASS_DEPTH"); depthAttachment = resources->requestRenderTarget("UIPASS_DEPTH");
ShaderCreateInfo createInfo; ShaderCreateInfo createInfo = {
createInfo.mainModule = "TextPass"; .name = "TextVertex",
createInfo.defines["INDEX_VIEW_PARAMS"] = "0"; .mainModule = "TextPass",
createInfo.name = "TextVertex"; .entryPoint = "vertexMain",
createInfo.entryPoint = "vertexMain"; };
vertexShader = graphics->createVertexShader(createInfo); vertexShader = graphics->createVertexShader(createInfo);
createInfo.name = "TextFragment"; createInfo.name = "TextFragment";
+5 -4
View File
@@ -96,10 +96,11 @@ void UIPass::publishOutputs()
void UIPass::createRenderPass() void UIPass::createRenderPass()
{ {
ShaderCreateInfo createInfo; ShaderCreateInfo createInfo = {
createInfo.mainModule = "UIPass"; .name = "UIVertex",
createInfo.name = "UIVertex"; .mainModule = "UIPass",
createInfo.entryPoint = "vertexMain"; .entryPoint = "vertexMain",
};
vertexShader = graphics->createVertexShader(createInfo); vertexShader = graphics->createVertexShader(createInfo);
createInfo.name = "UIFragment"; createInfo.name = "UIFragment";
+1 -10
View File
@@ -111,19 +111,10 @@ void ShaderCompiler::createShaders(ShaderPermutation permutation, Gfx::OPipeline
if (std::strlen(permutation.materialName) > 0) if (std::strlen(permutation.materialName) > 0)
{ {
createInfo.additionalModules.add(permutation.materialName); createInfo.additionalModules.add(permutation.materialName);
createInfo.typeParameter.add(Pair<const char*, const char*>("IMaterial", permutation.materialName)); createInfo.defines["MATERIAL_FILE_NAME"] = permutation.materialName;
} }
createInfo.typeParameter.add({ Pair<const char*, const char*>("IVertexData", permutation.vertexDataName) }); createInfo.typeParameter.add({ Pair<const char*, const char*>("IVertexData", permutation.vertexDataName) });
createInfo.additionalModules.add(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) if (permutation.useMeshShading)
{ {
+2 -6
View File
@@ -52,17 +52,13 @@ Slang::ComPtr<slang::IBlob> Seele::generateShader(const ShaderCreateInfo& create
Slang::ComPtr<slang::IBlob> diagnostics; Slang::ComPtr<slang::IBlob> diagnostics;
Array<slang::IComponentType*> modules; Array<slang::IComponentType*> modules;
Slang::ComPtr<slang::IEntryPoint> entrypoint; Slang::ComPtr<slang::IEntryPoint> entrypoint;
slang::IModule* mainModule = nullptr;
for (const auto& moduleName : createInfo.additionalModules) for (const auto& moduleName : createInfo.additionalModules)
{ {
modules.add(session->loadModule(moduleName.c_str(), diagnostics.writeRef())); modules.add(session->loadModule(moduleName.c_str(), diagnostics.writeRef()));
if (moduleName == createInfo.mainModule)
{
mainModule = (slang::IModule*)modules.back();
}
CHECK_DIAGNOSTICS(); CHECK_DIAGNOSTICS();
} }
slang::IModule* mainModule = session->loadModule(createInfo.mainModule.c_str(), diagnostics.writeRef());
modules.add(mainModule);
CHECK_DIAGNOSTICS(); CHECK_DIAGNOSTICS();
mainModule->findEntryPointByName(createInfo.entryPoint.c_str(), entrypoint.writeRef()); mainModule->findEntryPointByName(createInfo.entryPoint.c_str(), entrypoint.writeRef());
+3 -2
View File
@@ -114,10 +114,9 @@ void Material::load(ArchiveBuffer& buffer)
void Material::compile() void Material::compile()
{ {
std::ofstream codeStream("./shaders/generated/"+materialName+".slang"); std::ofstream codeStream("./shaders/generated/"+materialName+".slang");
codeStream << "import Material;\n";
codeStream << "import BRDF;\n"; codeStream << "import BRDF;\n";
codeStream << "import MaterialParameter;\n"; codeStream << "import MaterialParameter;\n";
codeStream << "struct " << materialName << " : IMaterial {\n"; codeStream << "struct " << materialName << "{\n";
for(const auto& parameter : parameters) for(const auto& parameter : parameters)
{ {
PShaderParameter handle = PShaderExpression(*codeExpressions.find([&parameter](const OShaderExpression& exp) {return exp->key == parameter; })); PShaderParameter handle = PShaderExpression(*codeExpressions.find([&parameter](const OShaderExpression& exp) {return exp->key == parameter; }));
@@ -139,5 +138,7 @@ void Material::compile()
codeStream << "\t\treturn result;\n"; codeStream << "\t\treturn result;\n";
codeStream << "\t}\n"; codeStream << "\t}\n";
codeStream << "};\n"; codeStream << "};\n";
codeStream << "layout(set=4)";
codeStream << "ParameterBlock<" << materialName << "> pMaterial;";
graphics->getShaderCompiler()->registerMaterial(this); graphics->getShaderCompiler()->registerMaterial(this);
} }