diff --git a/impeller/renderer/renderer_unittests.cc b/impeller/renderer/renderer_unittests.cc index f2e2e8fb0b120..50250461f7bf1 100644 --- a/impeller/renderer/renderer_unittests.cc +++ b/impeller/renderer/renderer_unittests.cc @@ -1007,9 +1007,18 @@ TEST_P(RendererTest, DefaultIndexSize) { // Default to 16bit index buffer size, as this is a reasonable default and // supported on all backends without extensions. VertexBufferBuilder vertex_builder; + vertex_builder.AppendIndex(0u); ASSERT_EQ(vertex_builder.GetIndexType(), IndexType::k16bit); } +TEST_P(RendererTest, DefaultIndexBehavior) { + using VS = BoxFadeVertexShader; + + // Do not create any index buffer if no indices were provided. + VertexBufferBuilder vertex_builder; + ASSERT_EQ(vertex_builder.GetIndexType(), IndexType::kNone); +} + TEST_P(RendererTest, VertexBufferBuilder) { // Does not create index buffer if one is provided. using VS = BoxFadeVertexShader; diff --git a/impeller/renderer/vertex_buffer_builder.h b/impeller/renderer/vertex_buffer_builder.h index 10154eb498ad4..6617820403d9c 100644 --- a/impeller/renderer/vertex_buffer_builder.h +++ b/impeller/renderer/vertex_buffer_builder.h @@ -30,13 +30,16 @@ class VertexBufferBuilder { ~VertexBufferBuilder() = default; constexpr impeller::IndexType GetIndexType() const { + if (indices_.size() == 0) { + return impeller::IndexType::kNone; + } if constexpr (sizeof(IndexType) == 2) { return impeller::IndexType::k16bit; - } else if (sizeof(IndexType) == 4) { + } + if (sizeof(IndexType) == 4) { return impeller::IndexType::k32bit; - } else { - return impeller::IndexType::kUnknown; } + return impeller::IndexType::kUnknown; } void SetLabel(std::string label) { label_ = std::move(label); } @@ -121,22 +124,13 @@ class VertexBufferBuilder { return buffer->AsBufferView(); } - std::vector CreateIndexBuffer() const { - if (indices_.size() > 0) { - return indices_; - } - - // So dumb! We don't actually need an index buffer right now. But we will - // once de-duplication is done. So assume this is always done. - std::vector index_buffer; - for (size_t i = 0; i < vertices_.size(); i++) { - index_buffer.push_back(i); - } - return index_buffer; - } + std::vector CreateIndexBuffer() const { return indices_; } BufferView CreateIndexBufferView(HostBuffer& buffer) const { const auto index_buffer = CreateIndexBuffer(); + if (index_buffer.size() == 0) { + return {}; + } return buffer.Emplace(index_buffer.data(), index_buffer.size() * sizeof(IndexType), alignof(IndexType)); @@ -144,6 +138,9 @@ class VertexBufferBuilder { BufferView CreateIndexBufferView(Allocator& allocator) const { const auto index_buffer = CreateIndexBuffer(); + if (index_buffer.size() == 0) { + return {}; + } auto buffer = allocator.CreateBufferWithCopy( reinterpret_cast(index_buffer.data()), index_buffer.size() * sizeof(IndexType));