From 8331696707a5cdee856d82a4e47572256ade6b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 13 Dec 2013 15:20:39 +0100 Subject: [PATCH] Text: test that proper index type is used in Renderer. Something smells fishy here. --- src/Text/Test/RendererGLTest.cpp | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/Text/Test/RendererGLTest.cpp b/src/Text/Test/RendererGLTest.cpp index f42391635..c3a8b1e9d 100644 --- a/src/Text/Test/RendererGLTest.cpp +++ b/src/Text/Test/RendererGLTest.cpp @@ -34,6 +34,7 @@ class RendererGLTest: public Magnum::Test::AbstractOpenGLTester { void renderData(); void renderMesh(); + void renderMeshIndexType(); void mutableText(); void multiline(); @@ -42,6 +43,7 @@ class RendererGLTest: public Magnum::Test::AbstractOpenGLTester { RendererGLTest::RendererGLTest() { addTests({&RendererGLTest::renderData, &RendererGLTest::renderMesh, + &RendererGLTest::renderMeshIndexType, &RendererGLTest::mutableText, &RendererGLTest::multiline}); @@ -211,6 +213,45 @@ void RendererGLTest::renderMesh() { #endif } +void RendererGLTest::renderMeshIndexType() { + #ifndef MAGNUM_TARGET_GLES + TestFont font; + Mesh mesh; + Buffer vertexBuffer, indexBuffer; + + /* Sizes: four vertices per glyph, each vertex has 2D position and 2D + texture coordinates, each float is four bytes; six indices per glyph. */ + + /* 8-bit indices (exactly 256 vertices) */ + std::tie(mesh, std::ignore) = Text::Renderer3D::render(font, *static_cast(nullptr), + 1.0f, std::string(64, 'a'), vertexBuffer, indexBuffer, BufferUsage::StaticDraw); + MAGNUM_VERIFY_NO_ERROR(); + Containers::Array indicesByte = indexBuffer.data(); + CORRADE_COMPARE(vertexBuffer.size(), 256*(2 + 2)*4); + CORRADE_COMPARE(indicesByte.size(), 64*6); + CORRADE_COMPARE(std::vector(indicesByte.begin(), indicesByte.begin()+18), (std::vector{ + 0, 1, 2, 1, 3, 2, + 4, 5, 6, 5, 7, 6, + 8, 9, 10, 9, 11, 10 + })); + + /* 16-bit indices (260 vertices) */ + std::tie(mesh, std::ignore) = Text::Renderer3D::render(font, *static_cast(nullptr), + 1.0f, std::string(65, 'a'), vertexBuffer, indexBuffer, BufferUsage::StaticDraw); + MAGNUM_VERIFY_NO_ERROR(); + Containers::Array indicesShort = indexBuffer.data(); + CORRADE_COMPARE(vertexBuffer.size(), 260*(2 + 2)*4); + CORRADE_COMPARE(indicesShort.size(), 65*6); + CORRADE_COMPARE(std::vector(indicesShort.begin(), indicesShort.begin()+18), (std::vector{ + 0, 1, 2, 1, 3, 2, + 4, 5, 6, 5, 7, 6, + 8, 9, 10, 9, 11, 10 + })); + #else + CORRADE_SKIP("Can't verify buffer contents on OpenGL ES."); + #endif +} + void RendererGLTest::mutableText() { TestFont font; Text::Renderer2D renderer(font, *static_cast(nullptr), 0.25f);