add RenderPass
This commit is contained in:
@ -113,8 +113,32 @@ namespace Prism
|
||||
|
||||
void EditorLayer::OnAttach()
|
||||
{
|
||||
// RenderPass
|
||||
FramebufferSpecification geoFramebufferSpec;
|
||||
geoFramebufferSpec.Width = 1280;
|
||||
geoFramebufferSpec.Height = 720;
|
||||
geoFramebufferSpec.Format = FramebufferFormat::RGBA16F;
|
||||
geoFramebufferSpec.ClearColor = { 0.1f, 0.1f, 0.1f, 1.0f };
|
||||
|
||||
RenderPassSpecification geoRenderPassSpec;
|
||||
geoRenderPassSpec.TargetFramebuffer = FrameBuffer::Create(geoFramebufferSpec);
|
||||
m_GeoPass = RenderPass::Create(geoRenderPassSpec);
|
||||
|
||||
|
||||
FramebufferSpecification compFramebufferSpec;
|
||||
compFramebufferSpec.Width = 1280;
|
||||
compFramebufferSpec.Height = 720;
|
||||
compFramebufferSpec.Format = FramebufferFormat::RGBA8;
|
||||
compFramebufferSpec.ClearColor = { 0.1f, 0.1f, 0.1f, 1.0f };
|
||||
|
||||
RenderPassSpecification compRenderPassSpec;
|
||||
compRenderPassSpec.TargetFramebuffer = FrameBuffer::Create(compFramebufferSpec);
|
||||
m_CompositePass = RenderPass::Create(compRenderPassSpec);
|
||||
|
||||
/*
|
||||
m_Framebuffer.reset(FrameBuffer::Create(1280, 720, FramebufferFormat::RGBA16F));
|
||||
m_FinalPresentBuffer.reset(FrameBuffer::Create(1280, 720, FramebufferFormat::RGBA8));
|
||||
*/
|
||||
|
||||
m_QuadShader = Shader::Create("assets/shaders/quad.glsl");
|
||||
m_HDRShader = Shader::Create("assets/shaders/hdr.glsl");
|
||||
@ -151,7 +175,7 @@ namespace Prism
|
||||
mi->Set("u_Roughness", roughness);
|
||||
mi->Set("u_ModelMatrix", glm::translate(glm::mat4(1.0f), glm::vec3(x, 0.0f, 0.0f)));
|
||||
x += 1.1f;
|
||||
roughness += 0.15f;
|
||||
roughness += 0.125f;
|
||||
m_MetalSphereMaterialInstances.push_back(mi);
|
||||
}
|
||||
|
||||
@ -165,26 +189,17 @@ namespace Prism
|
||||
mi->Set("u_Roughness", roughness);
|
||||
mi->Set("u_ModelMatrix", translate(glm::mat4(1.0f), glm::vec3(x, 1.2f, 0.0f)));
|
||||
x += 1.1f;
|
||||
roughness += 0.15f;
|
||||
roughness += 0.125f;
|
||||
m_DielectricSphereMaterialInstances.push_back(mi);
|
||||
}
|
||||
// Create Quad
|
||||
x = -1;
|
||||
float y = -1;
|
||||
float width = 2, height = 2;
|
||||
struct QuadVertex
|
||||
{
|
||||
glm::vec3 Position;
|
||||
glm::vec2 TexCoord;
|
||||
};
|
||||
|
||||
// Create Quad
|
||||
static float QuadVertex[] = {
|
||||
-1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
|
||||
1.0f, -1.0f, 0.0f, 1.0f, 0.0f,
|
||||
1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
|
||||
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
static uint32_t QuadIndices[] = {
|
||||
0, 1, 2, 2, 3, 0
|
||||
};
|
||||
@ -225,7 +240,8 @@ namespace Prism
|
||||
m_Camera.Update(deltaTime);
|
||||
auto viewProjection = m_Camera.GetProjectionMatrix() * m_Camera.GetViewMatrix();
|
||||
|
||||
m_Framebuffer->Bind();
|
||||
// m_Framebuffer->Bind();
|
||||
Renderer::BeginRenderPass(m_GeoPass);
|
||||
Renderer::Clear(m_ClearColor[0], m_ClearColor[1], m_ClearColor[2], m_ClearColor[3]);
|
||||
|
||||
m_QuadShader->Bind();
|
||||
@ -252,7 +268,6 @@ namespace Prism
|
||||
m_MeshMaterial->Set("u_MetalnessTexToggle", m_MetalnessInput.UseTexture ? 1.0f : 0.0f);
|
||||
m_MeshMaterial->Set("u_RoughnessTexToggle", m_RoughnessInput.UseTexture ? 1.0f : 0.0f);
|
||||
m_MeshMaterial->Set("u_EnvMapRotation", m_EnvMapRotation);
|
||||
|
||||
m_MeshMaterial->Set("u_EnvRadianceTex", m_EnvironmentCubeMap);
|
||||
m_MeshMaterial->Set("u_EnvIrradianceTex", m_EnvironmentIrradiance);
|
||||
m_MeshMaterial->Set("u_BRDFLUTTexture", m_BRDFLUT);
|
||||
@ -317,19 +332,23 @@ namespace Prism
|
||||
m_GridMaterial->Set("u_MVP", viewProjection * glm::scale(glm::mat4(1.0f), glm::vec3(16.0f)));
|
||||
m_PlaneMesh->Render(deltaTime, m_GridMaterial);
|
||||
|
||||
m_Framebuffer->Unbind();
|
||||
// m_Framebuffer->Unbind();
|
||||
Renderer::EndRenderPass();
|
||||
|
||||
m_FinalPresentBuffer->Bind();
|
||||
Renderer::BeginRenderPass(m_CompositePass);
|
||||
// m_FinalPresentBuffer->Bind();
|
||||
m_HDRShader->Bind();
|
||||
m_HDRShader->SetFloat("u_Exposure", m_Exposure);
|
||||
m_Framebuffer->BindTexture();
|
||||
// m_Framebuffer->BindTexture();
|
||||
m_GeoPass->GetSpecification().TargetFramebuffer->BindTexture();
|
||||
/*
|
||||
m_VertexBuffer->Bind();
|
||||
m_IndexBuffer->Bind();
|
||||
*/
|
||||
m_FullscreenQuadVertexArray->Bind();
|
||||
Renderer::DrawIndexed(m_FullscreenQuadVertexArray->GetIndexBuffer()->GetCount(), false);
|
||||
m_FinalPresentBuffer->Unbind();
|
||||
// m_FinalPresentBuffer->Unbind();
|
||||
Renderer::EndRenderPass();
|
||||
}
|
||||
}
|
||||
|
||||
@ -681,10 +700,15 @@ namespace Prism
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));
|
||||
ImGui::Begin("Viewport");
|
||||
auto viewportSize = ImGui::GetContentRegionAvail();
|
||||
m_Framebuffer->Resize((uint32_t)viewportSize.x, (uint32_t)viewportSize.y);
|
||||
m_FinalPresentBuffer->Resize((uint32_t)viewportSize.x, (uint32_t)viewportSize.y);
|
||||
|
||||
m_GeoPass->GetSpecification().TargetFramebuffer->Resize((uint32_t)viewportSize.x, (uint32_t)viewportSize.y);
|
||||
m_CompositePass->GetSpecification().TargetFramebuffer->Resize((uint32_t)viewportSize.x, (uint32_t)viewportSize.y);
|
||||
|
||||
// m_Framebuffer->Resize((uint32_t)viewportSize.x, (uint32_t)viewportSize.y);
|
||||
// m_FinalPresentBuffer->Resize((uint32_t)viewportSize.x, (uint32_t)viewportSize.y);
|
||||
m_Camera.SetProjectionMatrix(glm::perspectiveFov(glm::radians(45.0f), viewportSize.x, viewportSize.y, 0.1f, 10000.0f));
|
||||
ImGui::Image((ImTextureRef)m_FinalPresentBuffer->GetColorAttachmentRendererID(), viewportSize, {0, 1}, {1, 0});
|
||||
// ImGui::Image((ImTextureRef)m_FinalPresentBuffer->GetColorAttachmentRendererID(), viewportSize, {0, 1}, {1, 0});
|
||||
ImGui::Image((ImTextureRef)m_CompositePass->GetSpecification().TargetFramebuffer->GetColorAttachmentRendererID(), viewportSize, { 0, 1 }, { 1, 0 });
|
||||
|
||||
// ImGuizmo
|
||||
if (m_GizmoType != -1)
|
||||
|
||||
@ -27,7 +27,8 @@ private:
|
||||
private:
|
||||
float m_ClearColor[4];
|
||||
|
||||
Ref<FrameBuffer> m_Framebuffer, m_FinalPresentBuffer;
|
||||
// Ref<FrameBuffer> m_Framebuffer, m_FinalPresentBuffer;
|
||||
Ref<RenderPass> m_GeoPass, m_CompositePass;
|
||||
|
||||
/*
|
||||
Ref<VertexBuffer> m_VertexBuffer;
|
||||
|
||||
Reference in New Issue
Block a user