THE STREET FINALLY RENDERS
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import Common;
|
||||
import LightEnv;
|
||||
import Material;
|
||||
import MaterialParameter;
|
||||
import MATERIAL_FILE_NAME;
|
||||
|
||||
struct LightCullingData
|
||||
{
|
||||
|
||||
@@ -2,10 +2,8 @@ import Common;
|
||||
import BRDF;
|
||||
import MaterialParameter;
|
||||
|
||||
interface IMaterial
|
||||
{
|
||||
associatedtype BRDF : IBRDF;
|
||||
BRDF prepare(MaterialParameter input);
|
||||
};
|
||||
layout(set=4)
|
||||
ParameterBlock<IMaterial> pMaterial;
|
||||
//interface IMaterial
|
||||
//{
|
||||
// associatedtype BRDF : IBRDF;
|
||||
// BRDF prepare(MaterialParameter input);
|
||||
//};
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -126,7 +126,6 @@ void DebugPass::createRenderPass()
|
||||
ShaderCreateInfo createInfo = {
|
||||
.name = "DebugVertex",
|
||||
.mainModule = "Debug",
|
||||
.additionalModules = { "Debug" },
|
||||
.entryPoint = "vertexMain",
|
||||
};
|
||||
vertexShader = graphics->createVertexShader(createInfo);
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -113,7 +113,6 @@ void SkyboxRenderPass::createRenderPass()
|
||||
ShaderCreateInfo createInfo = {
|
||||
.name = "SkyboxVertex",
|
||||
.mainModule = "Skybox",
|
||||
.additionalModules = {"Skybox"},
|
||||
.entryPoint = "vertexMain",
|
||||
};
|
||||
vertexShader = graphics->createVertexShader(createInfo);
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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<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.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)
|
||||
{
|
||||
|
||||
@@ -52,17 +52,13 @@ Slang::ComPtr<slang::IBlob> Seele::generateShader(const ShaderCreateInfo& create
|
||||
Slang::ComPtr<slang::IBlob> diagnostics;
|
||||
Array<slang::IComponentType*> modules;
|
||||
Slang::ComPtr<slang::IEntryPoint> 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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user