From 2834e6029e8286fa10811bda5e9f208626caf425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 20 Apr 2014 13:59:07 +0200 Subject: [PATCH] Added test for mesh base vertex. --- src/Magnum/Test/MeshGLTest.cpp | 72 +++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/src/Magnum/Test/MeshGLTest.cpp b/src/Magnum/Test/MeshGLTest.cpp index 803f0591f..5ff11396d 100644 --- a/src/Magnum/Test/MeshGLTest.cpp +++ b/src/Magnum/Test/MeshGLTest.cpp @@ -106,6 +106,10 @@ class MeshGLTest: public AbstractOpenGLTester { void setIndexBuffer(); void setIndexBufferRange(); void setIndexBufferUnsignedInt(); + + #ifndef MAGNUM_TARGET_GLES + void setBaseVertex(); + #endif }; MeshGLTest::MeshGLTest() { @@ -168,7 +172,12 @@ MeshGLTest::MeshGLTest() { &MeshGLTest::setIndexBuffer, &MeshGLTest::setIndexBufferRange, - &MeshGLTest::setIndexBufferUnsignedInt}); + &MeshGLTest::setIndexBufferUnsignedInt, + + #ifndef MAGNUM_TARGET_GLES + &MeshGLTest::setBaseVertex + #endif + }); } void MeshGLTest::construct() { @@ -397,7 +406,7 @@ Checker::Checker(AbstractShaderProgram&& shader, RenderbufferFormat format, Mesh .setCount(2); /* Skip first vertex so we test also offsets */ - MeshView(mesh).setVertexRange(1, 1).draw(shader); + MeshView(mesh).setCount(1).setBaseVertex(1).draw(shader); } template T Checker::get(ColorFormat format, ColorType type) { @@ -1108,7 +1117,7 @@ void MeshGLTest::addVertexBufferMultipleGaps() { namespace { struct IndexChecker { - explicit IndexChecker(Mesh& mesh); + explicit IndexChecker(Mesh& mesh, Int baseVertex = 0); Color4ub get(); Renderbuffer renderbuffer; @@ -1138,7 +1147,7 @@ namespace { } #ifndef DOXYGEN_GENERATING_OUTPUT -IndexChecker::IndexChecker(Mesh& mesh): framebuffer({{}, Vector2i(1)}) { +IndexChecker::IndexChecker(Mesh& mesh, Int baseVertex): framebuffer({{}, Vector2i(1)}) { #ifndef MAGNUM_TARGET_GLES2 renderbuffer.setStorage(RenderbufferFormat::RGBA8, Vector2i(1)); #else @@ -1151,7 +1160,7 @@ IndexChecker::IndexChecker(Mesh& mesh): framebuffer({{}, Vector2i(1)}) { .setCount(2); /* Skip first vertex so we test also offsets */ - MeshView(mesh).setIndexRange(1, 1).draw(MultipleShader{}); + MeshView(mesh).setCount(1).setBaseVertex(baseVertex).setIndexRange(1).draw(MultipleShader{}); } Color4ub IndexChecker::get() { @@ -1229,6 +1238,59 @@ void MeshGLTest::setIndexBufferUnsignedInt() { CORRADE_COMPARE(value, indexedResult); } +#ifndef MAGNUM_TARGET_GLES +void MeshGLTest::setBaseVertex() { + const Float indexedVertexData[] = { + 0.0f, 0.0f, /* Offset */ + + /* First attribute */ + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, + + /* Second attribute */ + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, + + /* Third attribute */ + Math::normalize(64), + Math::normalize(17), + Math::normalize(56), + Math::normalize(15), + Math::normalize(164), + Math::normalize(17), + Math::normalize(97), + Math::normalize(28), + + /* Fourth attribute */ + 0.3f, 0.1f, 0.5f, + 0.4f, 0.0f, -0.9f, + 1.0f, -0.5f + }; + + Buffer vertices; + vertices.setData(indexedVertexData, BufferUsage::StaticDraw); + + constexpr UnsignedShort indexData[] = { 2, 1, 0 }; + Buffer indices(Buffer::Target::ElementArray); + indices.setData(indexData, BufferUsage::StaticDraw); + + Mesh mesh; + mesh.addVertexBuffer(vertices, 2*4, MultipleShader::Position(), + MultipleShader::Normal(), MultipleShader::TextureCoordinates()) + .setIndexBuffer(indices, 2, Mesh::IndexType::UnsignedShort); + + MAGNUM_VERIFY_NO_ERROR(); + + /* base vertex is 2 */ + const auto value = IndexChecker(mesh, 2).get(); + + MAGNUM_VERIFY_NO_ERROR(); + CORRADE_COMPARE(value, indexedResult); +} +#endif + }} CORRADE_TEST_MAIN(Magnum::Test::MeshGLTest)