Fixed MeshRenderer, our cube is now totally drawn by mesh renderer !
This commit is contained in:
@@ -16,87 +16,89 @@ namespace Juliet
|
|||||||
|
|
||||||
bool InitializeMeshRenderer(NonNullPtr<Arena> arena, NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window)
|
bool InitializeMeshRenderer(NonNullPtr<Arena> arena, NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window)
|
||||||
{
|
{
|
||||||
(void)arena;
|
bool result = true;
|
||||||
(void)device;
|
|
||||||
(void)window;
|
g_MeshRenderer.Meshes.Create(arena JULIET_DEBUG_PARAM("Meshes"));
|
||||||
return true;
|
g_MeshRenderer.Vertices.Create(arena JULIET_DEBUG_PARAM("Vertices"));
|
||||||
// bool result = true;
|
g_MeshRenderer.Indices.Create(arena JULIET_DEBUG_PARAM("Indices"));
|
||||||
//
|
|
||||||
// g_MeshRenderer.Meshes.Create(arena JULIET_DEBUG_PARAM("Meshes"));
|
GraphicsDevice* graphicsDevice = g_MeshRenderer.Device = device.Get();
|
||||||
// g_MeshRenderer.Vertices.Create(arena JULIET_DEBUG_PARAM("Vertices"));
|
|
||||||
// g_MeshRenderer.Indices.Create(arena JULIET_DEBUG_PARAM("Indices"));
|
// Create graphics pipeline
|
||||||
//
|
String entryPoint = WrapString("main");
|
||||||
// GraphicsDevice* graphicsDevice = g_MeshRenderer.Device = device.Get();
|
ShaderCreateInfo shaderCI = {};
|
||||||
//
|
shaderCI.EntryPoint = entryPoint;
|
||||||
// // Create graphics pipeline
|
|
||||||
// String entryPoint = WrapString("main");
|
// TODO: Assets management that handles path to assets or something.
|
||||||
// ShaderCreateInfo shaderCI = {};
|
String shaderPath = WrapString("../../Assets/compiled/Triangle.vert.dxil");
|
||||||
// shaderCI.EntryPoint = entryPoint;
|
shaderCI.Stage = ShaderStage::Vertex;
|
||||||
//
|
Shader* vertexShader = CreateShader(graphicsDevice, shaderPath, shaderCI);
|
||||||
// // TODO: Assets management that handles path to assets or something.
|
|
||||||
// String shaderPath = WrapString("../../Assets/compiled/Triangle.vert.dxil");
|
shaderPath = WrapString("../../Assets/compiled/SolidColor.frag.dxil");
|
||||||
// shaderCI.Stage = ShaderStage::Vertex;
|
shaderCI.Stage = ShaderStage::Fragment;
|
||||||
// Shader* vertexShader = CreateShader(graphicsDevice, shaderPath, shaderCI);
|
Shader* fragmentShader = CreateShader(graphicsDevice, shaderPath, shaderCI);
|
||||||
//
|
|
||||||
// shaderPath = WrapString("../../Assets/compiled/SolidColor.frag.dxil");
|
ColorTargetDescription colorTargetDescription = {};
|
||||||
// shaderCI.Stage = ShaderStage::Fragment;
|
colorTargetDescription.Format = GetSwapChainTextureFormat(graphicsDevice, window);
|
||||||
// Shader* fragmentShader = CreateShader(graphicsDevice, shaderPath, shaderCI);
|
|
||||||
//
|
GraphicsPipelineCreateInfo pipelineCI = {};
|
||||||
// ColorTargetDescription colorTargetDescription = {};
|
pipelineCI.VertexShader = vertexShader;
|
||||||
// colorTargetDescription.Format = GetSwapChainTextureFormat(graphicsDevice, window);
|
pipelineCI.FragmentShader = fragmentShader;
|
||||||
//
|
pipelineCI.PrimitiveType = PrimitiveType::TriangleList;
|
||||||
// GraphicsPipelineCreateInfo pipelineCI = {};
|
pipelineCI.TargetInfo = { .ColorTargetDescriptions = &colorTargetDescription,
|
||||||
// pipelineCI.VertexShader = vertexShader;
|
.NumColorTargets = 1,
|
||||||
// pipelineCI.FragmentShader = fragmentShader;
|
.DepthStencilFormat = TextureFormat::D32_FLOAT,
|
||||||
// pipelineCI.PrimitiveType = PrimitiveType::TriangleList;
|
.HasDepthStencilTarget = true };
|
||||||
// pipelineCI.TargetInfo = { .ColorTargetDescriptions = &colorTargetDescription,
|
pipelineCI.RasterizerState.FillMode = FillMode::Solid;
|
||||||
// .NumColorTargets = 1,
|
pipelineCI.DepthStencilState.EnableDepthTest = true;
|
||||||
// .DepthStencilFormat = TextureFormat::D32_FLOAT,
|
pipelineCI.DepthStencilState.EnableDepthWrite = true;
|
||||||
// .HasDepthStencilTarget = true };
|
pipelineCI.DepthStencilState.CompareOperation = CompareOperation::Less;
|
||||||
// pipelineCI.RasterizerState.FillMode = FillMode::Solid;
|
|
||||||
// pipelineCI.DepthStencilState.EnableDepthTest = true;
|
g_MeshRenderer.Pipeline = CreateGraphicsPipeline(graphicsDevice, pipelineCI);
|
||||||
// pipelineCI.DepthStencilState.EnableDepthWrite = true;
|
if (g_MeshRenderer.Pipeline == nullptr)
|
||||||
// pipelineCI.DepthStencilState.CompareOperation = CompareOperation::Less;
|
{
|
||||||
//
|
LogError(LogCategory::Graphics, "Failed to create graphics pipeline!");
|
||||||
// g_MeshRenderer.Pipeline = CreateGraphicsPipeline(graphicsDevice, pipelineCI);
|
result = false;
|
||||||
// if (g_MeshRenderer.Pipeline == nullptr)
|
}
|
||||||
// {
|
|
||||||
// LogError(LogCategory::Graphics, "Failed to create graphics pipeline!");
|
// Create the vertex and index buffers
|
||||||
// result = false;
|
BufferCreateInfo vertexBufferCI = {};
|
||||||
// }
|
vertexBufferCI.Size = kGeometryPage;
|
||||||
//
|
vertexBufferCI.Usage = BufferUsage::StructuredBuffer;
|
||||||
// // Create the vertex and index buffers
|
g_MeshRenderer.VertexBuffer = CreateGraphicsBuffer(graphicsDevice, vertexBufferCI);
|
||||||
// BufferCreateInfo vertexBufferCI = {};
|
|
||||||
// vertexBufferCI.Size = kGeometryPage;
|
BufferCreateInfo indexBufferCI = {};
|
||||||
// vertexBufferCI.Usage = BufferUsage::VertexBuffer;
|
indexBufferCI.Size = kIndexPage;
|
||||||
// g_MeshRenderer.VertexBuffer = CreateGraphicsBuffer(graphicsDevice, vertexBufferCI);
|
indexBufferCI.Usage = BufferUsage::IndexBuffer;
|
||||||
//
|
g_MeshRenderer.IndexBuffer = CreateGraphicsBuffer(graphicsDevice, indexBufferCI);
|
||||||
// BufferCreateInfo indexBufferCI = {};
|
|
||||||
// indexBufferCI.Size = kIndexPage;
|
if (vertexShader)
|
||||||
// indexBufferCI.Usage = BufferUsage::IndexBuffer;
|
{
|
||||||
// g_MeshRenderer.IndexBuffer = CreateGraphicsBuffer(graphicsDevice, indexBufferCI);
|
DestroyShader(graphicsDevice, vertexShader);
|
||||||
//
|
}
|
||||||
// if (vertexShader)
|
if (fragmentShader)
|
||||||
// {
|
{
|
||||||
// DestroyShader(graphicsDevice, vertexShader);
|
DestroyShader(graphicsDevice, fragmentShader);
|
||||||
// }
|
}
|
||||||
// if (fragmentShader)
|
|
||||||
// {
|
return result;
|
||||||
// DestroyShader(graphicsDevice, fragmentShader);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShutdownMeshRenderer()
|
void ShutdownMeshRenderer()
|
||||||
{
|
{
|
||||||
return;
|
if (g_MeshRenderer.LoadCopyBuffer)
|
||||||
// DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.IndexBuffer);
|
{
|
||||||
// DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.VertexBuffer);
|
UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer);
|
||||||
//
|
DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer);
|
||||||
// g_MeshRenderer.Indices.Destroy();
|
g_MeshRenderer.LoadCopyBuffer = nullptr;
|
||||||
// g_MeshRenderer.Vertices.Destroy();
|
}
|
||||||
// g_MeshRenderer.Meshes.Destroy();
|
|
||||||
|
DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.IndexBuffer);
|
||||||
|
DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.VertexBuffer);
|
||||||
|
|
||||||
|
g_MeshRenderer.Indices.Destroy();
|
||||||
|
g_MeshRenderer.Vertices.Destroy();
|
||||||
|
g_MeshRenderer.Meshes.Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadMeshesOnGPU(NonNullPtr<CommandList> cmdList)
|
void LoadMeshesOnGPU(NonNullPtr<CommandList> cmdList)
|
||||||
@@ -119,12 +121,18 @@ namespace Juliet
|
|||||||
Vertex* vertices = g_MeshRenderer.Vertices.Data;
|
Vertex* vertices = g_MeshRenderer.Vertices.Data;
|
||||||
if (!vertices)
|
if (!vertices)
|
||||||
{
|
{
|
||||||
|
UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer);
|
||||||
|
DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer);
|
||||||
|
g_MeshRenderer.LoadCopyBuffer = nullptr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Index* indices = g_MeshRenderer.Indices.Data;
|
Index* indices = g_MeshRenderer.Indices.Data;
|
||||||
if (!indices)
|
if (!indices)
|
||||||
{
|
{
|
||||||
|
UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer);
|
||||||
|
DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer);
|
||||||
|
g_MeshRenderer.LoadCopyBuffer = nullptr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,11 +189,12 @@ namespace Juliet
|
|||||||
pushData.BufferIndex = vertexDescriptorIndex;
|
pushData.BufferIndex = vertexDescriptorIndex;
|
||||||
SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData);
|
SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData);
|
||||||
|
|
||||||
|
SetIndexBuffer(cmdList, g_MeshRenderer.IndexBuffer, IndexFormat::UInt16, g_MeshRenderer.Indices.Count, 0);
|
||||||
|
|
||||||
for (Mesh& mesh : g_MeshRenderer.Meshes)
|
for (Mesh& mesh : g_MeshRenderer.Meshes)
|
||||||
{
|
{
|
||||||
SetIndexBuffer(cmdList, g_MeshRenderer.IndexBuffer, IndexFormat::UInt16, mesh.IndexCount, 0);
|
DrawIndexedPrimitives(pass, static_cast<uint32>(mesh.IndexCount), 1, static_cast<uint32>(mesh.IndexOffset),
|
||||||
// DrawIndexedPrimitives(pass, static_cast<uint32>(mesh.IndexCount), 1, static_cast<uint32>(mesh.IndexOffset),
|
static_cast<uint32>(mesh.VertexOffset), 0);
|
||||||
// static_cast<uint32>(mesh.VertexOffset), 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,41 +203,41 @@ namespace Juliet
|
|||||||
Mesh result = {};
|
Mesh result = {};
|
||||||
|
|
||||||
constexpr Vertex vertexData[] = {
|
constexpr Vertex vertexData[] = {
|
||||||
// Front Face (Z = -0.5f)
|
// Front Face (Z = -0.5f) — Red
|
||||||
{ { -0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f } }, // 0: Top Left
|
{ { -0.5f, 0.5f, -0.5f }, { 0.8f, 0.2f, 0.2f, 1.0f } },
|
||||||
{ { 0.5f, 0.5f, -0.5f }, { 1.0f, 0.0f } }, // 1: Top Right
|
{ { 0.5f, 0.5f, -0.5f }, { 0.8f, 0.2f, 0.2f, 1.0f } },
|
||||||
{ { 0.5f, -0.5f, -0.5f }, { 1.0f, 1.0f } }, // 2: Bottom Right
|
{ { 0.5f, -0.5f, -0.5f }, { 0.8f, 0.2f, 0.2f, 1.0f } },
|
||||||
{ { -0.5f, -0.5f, -0.5f }, { 0.0f, 1.0f } }, // 3: Bottom Left
|
{ { -0.5f, -0.5f, -0.5f }, { 0.8f, 0.2f, 0.2f, 1.0f } },
|
||||||
|
|
||||||
// Back Face (Z = 0.5f)
|
// Back Face (Z = 0.5f) — Green
|
||||||
{ { 0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f } }, // 4: Top Left
|
{ { 0.5f, 0.5f, 0.5f }, { 0.2f, 0.8f, 0.2f, 1.0f } },
|
||||||
{ { -0.5f, 0.5f, 0.5f }, { 1.0f, 0.0f } }, // 5: Top Right
|
{ { -0.5f, 0.5f, 0.5f }, { 0.2f, 0.8f, 0.2f, 1.0f } },
|
||||||
{ { -0.5f, -0.5f, 0.5f }, { 1.0f, 1.0f } }, // 6: Bottom Right
|
{ { -0.5f, -0.5f, 0.5f }, { 0.2f, 0.8f, 0.2f, 1.0f } },
|
||||||
{ { 0.5f, -0.5f, 0.5f }, { 0.0f, 1.0f } }, // 7: Bottom Left
|
{ { 0.5f, -0.5f, 0.5f }, { 0.2f, 0.8f, 0.2f, 1.0f } },
|
||||||
|
|
||||||
// Top Face (Y = 0.5f)
|
// Top Face (Y = 0.5f) — Blue
|
||||||
{ { -0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f } }, // 8: Top Left
|
{ { -0.5f, 0.5f, 0.5f }, { 0.2f, 0.2f, 0.8f, 1.0f } },
|
||||||
{ { 0.5f, 0.5f, 0.5f }, { 1.0f, 0.0f } }, // 9: Top Right
|
{ { 0.5f, 0.5f, 0.5f }, { 0.2f, 0.2f, 0.8f, 1.0f } },
|
||||||
{ { 0.5f, 0.5f, -0.5f }, { 1.0f, 1.0f } }, // 10: Bottom Right
|
{ { 0.5f, 0.5f, -0.5f }, { 0.2f, 0.2f, 0.8f, 1.0f } },
|
||||||
{ { -0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f } }, // 11: Bottom Left
|
{ { -0.5f, 0.5f, -0.5f }, { 0.2f, 0.2f, 0.8f, 1.0f } },
|
||||||
|
|
||||||
// Bottom Face (Y = -0.5f)
|
// Bottom Face (Y = -0.5f) — Yellow
|
||||||
{ { -0.5f, -0.5f, -0.5f }, { 0.0f, 0.0f } }, // 12: Top Left
|
{ { -0.5f, -0.5f, -0.5f }, { 0.8f, 0.8f, 0.2f, 1.0f } },
|
||||||
{ { 0.5f, -0.5f, -0.5f }, { 1.0f, 0.0f } }, // 13: Top Right
|
{ { 0.5f, -0.5f, -0.5f }, { 0.8f, 0.8f, 0.2f, 1.0f } },
|
||||||
{ { 0.5f, -0.5f, 0.5f }, { 1.0f, 1.0f } }, // 14: Bottom Right
|
{ { 0.5f, -0.5f, 0.5f }, { 0.8f, 0.8f, 0.2f, 1.0f } },
|
||||||
{ { -0.5f, -0.5f, 0.5f }, { 0.0f, 1.0f } }, // 15: Bottom Left
|
{ { -0.5f, -0.5f, 0.5f }, { 0.8f, 0.8f, 0.2f, 1.0f } },
|
||||||
|
|
||||||
// Right Face (X = 0.5f)
|
// Right Face (X = 0.5f) — Cyan
|
||||||
{ { 0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f } }, // 16: Top Left
|
{ { 0.5f, 0.5f, -0.5f }, { 0.2f, 0.8f, 0.8f, 1.0f } },
|
||||||
{ { 0.5f, 0.5f, 0.5f }, { 1.0f, 0.0f } }, // 17: Top Right
|
{ { 0.5f, 0.5f, 0.5f }, { 0.2f, 0.8f, 0.8f, 1.0f } },
|
||||||
{ { 0.5f, -0.5f, 0.5f }, { 1.0f, 1.0f } }, // 18: Bottom Right
|
{ { 0.5f, -0.5f, 0.5f }, { 0.2f, 0.8f, 0.8f, 1.0f } },
|
||||||
{ { 0.5f, -0.5f, -0.5f }, { 0.0f, 1.0f } }, // 19: Bottom Left
|
{ { 0.5f, -0.5f, -0.5f }, { 0.2f, 0.8f, 0.8f, 1.0f } },
|
||||||
|
|
||||||
// Left Face (X = -0.5f)
|
// Left Face (X = -0.5f) — Magenta
|
||||||
{ { -0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f } }, // 20: Top Left
|
{ { -0.5f, 0.5f, 0.5f }, { 0.8f, 0.2f, 0.8f, 1.0f } },
|
||||||
{ { -0.5f, 0.5f, -0.5f }, { 1.0f, 0.0f } }, // 21: Top Right
|
{ { -0.5f, 0.5f, -0.5f }, { 0.8f, 0.2f, 0.8f, 1.0f } },
|
||||||
{ { -0.5f, -0.5f, -0.5f }, { 1.0f, 1.0f } }, // 22: Bottom Right
|
{ { -0.5f, -0.5f, -0.5f }, { 0.8f, 0.2f, 0.8f, 1.0f } },
|
||||||
{ { -0.5f, -0.5f, 0.5f }, { 0.0f, 1.0f } } // 23: Bottom Left
|
{ { -0.5f, -0.5f, 0.5f }, { 0.8f, 0.2f, 0.8f, 1.0f } }
|
||||||
};
|
};
|
||||||
constexpr size_t cubeVertexCount = ArraySize(vertexData);
|
constexpr size_t cubeVertexCount = ArraySize(vertexData);
|
||||||
result.VertexCount = cubeVertexCount;
|
result.VertexCount = cubeVertexCount;
|
||||||
|
|||||||
@@ -109,11 +109,11 @@ void JulietApplication::Init()
|
|||||||
Running = false;
|
Running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// std::ignore = AddCube();
|
std::ignore = AddCube();
|
||||||
//
|
|
||||||
// CommandList* loadCmd = AcquireCommandList(GraphicsDevice);
|
CommandList* loadCmd = AcquireCommandList(GraphicsDevice);
|
||||||
// LoadMeshesOnGPU(loadCmd);
|
LoadMeshesOnGPU(loadCmd);
|
||||||
// SubmitCommandLists(loadCmd);
|
SubmitCommandLists(loadCmd);
|
||||||
|
|
||||||
if (Running == false)
|
if (Running == false)
|
||||||
{
|
{
|
||||||
@@ -269,12 +269,12 @@ void JulietApplication::Update()
|
|||||||
|
|
||||||
void JulietApplication::OnPreRender(CommandList* /*cmd*/) {}
|
void JulietApplication::OnPreRender(CommandList* /*cmd*/) {}
|
||||||
|
|
||||||
void JulietApplication::OnRender(RenderPass*, CommandList*)
|
void JulietApplication::OnRender(RenderPass* pass, CommandList* cmd)
|
||||||
{
|
{
|
||||||
// PushData pushData = {};
|
PushData pushData = {};
|
||||||
// pushData.ViewProjection = Camera_GetViewProjectionMatrix(GetDebugCamera());
|
pushData.ViewProjection = Camera_GetViewProjectionMatrix(GetDebugCamera());
|
||||||
|
|
||||||
// RenderMeshes(pass, cmd, pushData);
|
RenderMeshes(pass, cmd, pushData);
|
||||||
|
|
||||||
// SetPushConstants(cmd, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData);
|
// SetPushConstants(cmd, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user