From 5385f12cfba47b286ae6077b97090b957fde0da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 4 Apr 2025 23:58:05 +0200 Subject: [PATCH] Text: test that calling Renderer2D::render() replaces the contents. Apart from the fact that it blew up when the text was indeed empty, which is fixed now (ugh), it was kinda obvious with the current implementation but won't be when the guts get replaced with something reasonable. So ensure we don't break existing use cases. --- src/Magnum/Text/Renderer.cpp | 14 ++++++++------ src/Magnum/Text/Test/RendererGLTest.cpp | 6 ++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Magnum/Text/Renderer.cpp b/src/Magnum/Text/Renderer.cpp index b815cfb43..5ec155aa9 100644 --- a/src/Magnum/Text/Renderer.cpp +++ b/src/Magnum/Text/Renderer.cpp @@ -2044,12 +2044,14 @@ void AbstractRenderer::render(const std::string& text) { CORRADE_ASSERT(glyphCount <= _capacity, "Text::Renderer::render(): capacity" << _capacity << "too small to render" << glyphCount << "glyphs", ); - /* Interleave the data into mapped buffer*/ - Containers::ArrayView vertices(static_cast(bufferMapImplementation(_vertexBuffer, - vertexCount*sizeof(Vertex))), vertexCount); - CORRADE_INTERNAL_ASSERT_OUTPUT(vertices); - std::copy(vertexData.begin(), vertexData.end(), vertices.begin()); - bufferUnmapImplementation(_vertexBuffer); + /* Interleave the data into mapped buffer, if there are any glyphs */ + if(vertexCount) { + Containers::ArrayView vertices(static_cast(bufferMapImplementation(_vertexBuffer, + vertexCount*sizeof(Vertex))), vertexCount); + CORRADE_INTERNAL_ASSERT_OUTPUT(vertices); + std::copy(vertexData.begin(), vertexData.end(), vertices.begin()); + bufferUnmapImplementation(_vertexBuffer); + } /* Update index count */ _mesh.setCount(indexCount); diff --git a/src/Magnum/Text/Test/RendererGLTest.cpp b/src/Magnum/Text/Test/RendererGLTest.cpp index 8432fcf4c..bff3f9a6c 100644 --- a/src/Magnum/Text/Test/RendererGLTest.cpp +++ b/src/Magnum/Text/Test/RendererGLTest.cpp @@ -1147,6 +1147,12 @@ void RendererGLTest::mutableText() { Vector2{ 9.0f, 9.0f} + offset, {1.0f, 1.0f}, }), TestSuite::Compare::Container); #endif + + /* Rendering again replaces previous contents. I.e., if rendering an empty + string, it makes the output empty. */ + renderer.render(""); + CORRADE_COMPARE(renderer.rectangle(), (Range2D{{0.0f, -1.75f}, {0.0f, 1.75f}})); + CORRADE_COMPARE(renderer.mesh().count(), 0); } void RendererGLTest::arrayGlyphCache() {