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() {