THE STREET FINALLY RENDERS
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
|
||||||
|
|||||||
@@ -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" }
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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([¶meter](const OShaderExpression& exp) {return exp->key == parameter; }));
|
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\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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user