Graphics: Fix MaterialPipeline::GetRenderPipeline

This commit is contained in:
Jérôme Leclercq 2020-10-31 16:29:02 +01:00
parent 8027ae9abe
commit ad88561245
2 changed files with 13 additions and 40 deletions

View File

@ -94,6 +94,7 @@ int main()
Nz::Material material(Nz::BasicMaterial::GetSettings());
//material.SetShader(Nz::ShaderStageType::Fragment, fragmentShader);
//material.SetShader(Nz::ShaderStageType::Vertex, vertexShader);
material.EnableDepthBuffer(true);
material.SetTexture(0, texture);
material.SetTextureSampler(0, textureSampler);
@ -109,33 +110,8 @@ int main()
Nz::AccessByOffset<Nz::Matrix4f&>(viewerDataBuffer.data(), viewerUboOffsets.viewMatrixOffset) = Nz::Matrix4f::Translate(Nz::Vector3f::Backward() * 1);
Nz::AccessByOffset<Nz::Matrix4f&>(viewerDataBuffer.data(), viewerUboOffsets.projMatrixOffset) = Nz::Matrix4f::Perspective(70.f, float(windowSize.x) / windowSize.y, 0.1f, 1000.f);
Nz::RenderPipelineLayoutInfo pipelineLayoutInfo;
{
auto& uboBinding = pipelineLayoutInfo.bindings.emplace_back();
uboBinding.index = 0;
uboBinding.shaderStageFlags = Nz::ShaderStageType::Vertex;
uboBinding.type = Nz::ShaderBindingType::UniformBuffer;
}
{
auto& uboBinding = pipelineLayoutInfo.bindings.emplace_back();
uboBinding.index = 1;
uboBinding.shaderStageFlags = Nz::ShaderStageType::Vertex;
uboBinding.type = Nz::ShaderBindingType::UniformBuffer;
}
{
auto& textureBinding = pipelineLayoutInfo.bindings.emplace_back();
textureBinding.index = 2;
textureBinding.shaderStageFlags = Nz::ShaderStageType::Fragment;
textureBinding.type = Nz::ShaderBindingType::Texture;
}
//std::shared_ptr<Nz::RenderPipelineLayout> renderPipelineLayout = device->InstantiateRenderPipelineLayout(std::move(pipelineLayoutInfo));
std::shared_ptr<Nz::RenderPipelineLayout> renderPipelineLayout = material.GetSettings()->GetRenderPipelineLayout();
Nz::ShaderBindingPtr shaderBinding = renderPipelineLayout->AllocateShaderBinding();
std::shared_ptr<Nz::AbstractBuffer> instanceDataUbo = device->InstantiateBuffer(Nz::BufferType_Uniform);
if (!instanceDataUbo->Initialize(instanceDataBuffer.size(), Nz::BufferUsage_DeviceLocal | Nz::BufferUsage_Dynamic))
{
@ -152,15 +128,16 @@ int main()
return __LINE__;
}
Nz::ShaderBindingPtr shaderBinding = renderPipelineLayout->AllocateShaderBinding();
shaderBinding->Update({
{
5,
material.GetSettings()->GetPredefinedBindingIndex(Nz::PredefinedShaderBinding::UboViewerData),
Nz::ShaderBinding::UniformBufferBinding {
viewerDataUbo.get(), 0, viewerDataBuffer.size()
}
},
{
4,
material.GetSettings()->GetPredefinedBindingIndex(Nz::PredefinedShaderBinding::UboInstanceData),
Nz::ShaderBinding::UniformBufferBinding {
instanceDataUbo.get(), 0, instanceDataBuffer.size()
}
@ -173,20 +150,14 @@ int main()
}
});
Nz::RenderPipelineInfo pipelineInfo;
pipelineInfo.pipelineLayout = renderPipelineLayout;
std::vector<Nz::RenderPipelineInfo::VertexBufferData> vertexBuffers = {
{
0,
drfreakVB->GetVertexDeclaration()
}
};
pipelineInfo.depthBuffer = true;
pipelineInfo.shaderStages.emplace_back(material.GetShader(Nz::ShaderStageType::Fragment));
pipelineInfo.shaderStages.emplace_back(material.GetShader(Nz::ShaderStageType::Vertex));
auto& vertexBuffer = pipelineInfo.vertexBuffers.emplace_back();
vertexBuffer.binding = 0;
vertexBuffer.declaration = drfreakVB->GetVertexDeclaration();
//std::shared_ptr<Nz::RenderPipeline> pipeline = material.GetPipeline()->GetRenderPipeline(pipelineInfo.vertexBuffers);
std::shared_ptr<Nz::RenderPipeline> pipeline = device->InstantiateRenderPipeline(pipelineInfo);
std::shared_ptr<Nz::RenderPipeline> pipeline = material.GetPipeline()->GetRenderPipeline(vertexBuffers);
Nz::RenderDevice* renderDevice = window.GetRenderDevice().get();

View File

@ -53,6 +53,8 @@ namespace Nz
renderPipelineInfo.shaderStages.push_back(shaderStage);
}
renderPipelineInfo.vertexBuffers = vertexBuffers;
return m_renderPipelines.emplace_back(Graphics::Instance()->GetRenderDevice().InstantiateRenderPipeline(std::move(renderPipelineInfo)));
}
/*!