Use indexed drawing in RHI triangle test
This commit is contained in:
@@ -29,6 +29,8 @@ constexpr Vertex kTriangleVertices[] = {
|
|||||||
{ { 0.5f, -0.5f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } },
|
{ { 0.5f, -0.5f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
constexpr uint32_t kTriangleIndices[] = { 0, 1, 2 };
|
||||||
|
|
||||||
const char kTriangleHlsl[] = R"(
|
const char kTriangleHlsl[] = R"(
|
||||||
struct VSInput {
|
struct VSInput {
|
||||||
float4 position : POSITION;
|
float4 position : POSITION;
|
||||||
@@ -149,6 +151,8 @@ private:
|
|||||||
|
|
||||||
RHIBuffer* mVertexBuffer = nullptr;
|
RHIBuffer* mVertexBuffer = nullptr;
|
||||||
RHIResourceView* mVertexBufferView = nullptr;
|
RHIResourceView* mVertexBufferView = nullptr;
|
||||||
|
RHIBuffer* mIndexBuffer = nullptr;
|
||||||
|
RHIResourceView* mIndexBufferView = nullptr;
|
||||||
RHIPipelineState* mPipelineState = nullptr;
|
RHIPipelineState* mPipelineState = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -180,6 +184,23 @@ void TriangleTest::InitializeTriangleResources() {
|
|||||||
mVertexBufferView = GetDevice()->CreateVertexBufferView(mVertexBuffer, viewDesc);
|
mVertexBufferView = GetDevice()->CreateVertexBufferView(mVertexBuffer, viewDesc);
|
||||||
ASSERT_NE(mVertexBufferView, nullptr);
|
ASSERT_NE(mVertexBufferView, nullptr);
|
||||||
|
|
||||||
|
BufferDesc indexBufferDesc = {};
|
||||||
|
indexBufferDesc.size = sizeof(kTriangleIndices);
|
||||||
|
indexBufferDesc.stride = sizeof(uint32_t);
|
||||||
|
indexBufferDesc.bufferType = static_cast<uint32_t>(BufferType::Index);
|
||||||
|
|
||||||
|
mIndexBuffer = GetDevice()->CreateBuffer(indexBufferDesc);
|
||||||
|
ASSERT_NE(mIndexBuffer, nullptr);
|
||||||
|
mIndexBuffer->SetData(kTriangleIndices, sizeof(kTriangleIndices));
|
||||||
|
mIndexBuffer->SetStride(sizeof(uint32_t));
|
||||||
|
mIndexBuffer->SetBufferType(BufferType::Index);
|
||||||
|
|
||||||
|
ResourceViewDesc indexViewDesc = {};
|
||||||
|
indexViewDesc.dimension = ResourceViewDimension::Buffer;
|
||||||
|
indexViewDesc.format = static_cast<uint32_t>(Format::R32_UInt);
|
||||||
|
mIndexBufferView = GetDevice()->CreateIndexBufferView(mIndexBuffer, indexViewDesc);
|
||||||
|
ASSERT_NE(mIndexBufferView, nullptr);
|
||||||
|
|
||||||
GraphicsPipelineDesc pipelineDesc = CreateTrianglePipelineDesc(GetBackendType());
|
GraphicsPipelineDesc pipelineDesc = CreateTrianglePipelineDesc(GetBackendType());
|
||||||
mPipelineState = GetDevice()->CreatePipelineState(pipelineDesc);
|
mPipelineState = GetDevice()->CreatePipelineState(pipelineDesc);
|
||||||
ASSERT_NE(mPipelineState, nullptr);
|
ASSERT_NE(mPipelineState, nullptr);
|
||||||
@@ -201,16 +222,29 @@ void TriangleTest::ShutdownTriangleResources() {
|
|||||||
mVertexBufferView = nullptr;
|
mVertexBufferView = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mIndexBufferView != nullptr) {
|
||||||
|
mIndexBufferView->Shutdown();
|
||||||
|
delete mIndexBufferView;
|
||||||
|
mIndexBufferView = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (mVertexBuffer != nullptr) {
|
if (mVertexBuffer != nullptr) {
|
||||||
mVertexBuffer->Shutdown();
|
mVertexBuffer->Shutdown();
|
||||||
delete mVertexBuffer;
|
delete mVertexBuffer;
|
||||||
mVertexBuffer = nullptr;
|
mVertexBuffer = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mIndexBuffer != nullptr) {
|
||||||
|
mIndexBuffer->Shutdown();
|
||||||
|
delete mIndexBuffer;
|
||||||
|
mIndexBuffer = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriangleTest::RenderFrame() {
|
void TriangleTest::RenderFrame() {
|
||||||
ASSERT_NE(mPipelineState, nullptr);
|
ASSERT_NE(mPipelineState, nullptr);
|
||||||
ASSERT_NE(mVertexBufferView, nullptr);
|
ASSERT_NE(mVertexBufferView, nullptr);
|
||||||
|
ASSERT_NE(mIndexBufferView, nullptr);
|
||||||
|
|
||||||
RHICommandList* cmdList = GetCommandList();
|
RHICommandList* cmdList = GetCommandList();
|
||||||
RHICommandQueue* cmdQueue = GetCommandQueue();
|
RHICommandQueue* cmdQueue = GetCommandQueue();
|
||||||
@@ -233,7 +267,8 @@ void TriangleTest::RenderFrame() {
|
|||||||
uint64_t offsets[] = { 0 };
|
uint64_t offsets[] = { 0 };
|
||||||
uint32_t strides[] = { sizeof(Vertex) };
|
uint32_t strides[] = { sizeof(Vertex) };
|
||||||
cmdList->SetVertexBuffers(0, 1, vertexBuffers, offsets, strides);
|
cmdList->SetVertexBuffers(0, 1, vertexBuffers, offsets, strides);
|
||||||
cmdList->Draw(3);
|
cmdList->SetIndexBuffer(mIndexBufferView, 0);
|
||||||
|
cmdList->DrawIndexed(static_cast<uint32_t>(sizeof(kTriangleIndices) / sizeof(kTriangleIndices[0])));
|
||||||
|
|
||||||
EndRender();
|
EndRender();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user