Skip to content

Commit

Permalink
Added test for mesh base vertex.
Browse files Browse the repository at this point in the history
  • Loading branch information
mosra committed Apr 27, 2014
1 parent 5e06b77 commit 2834e60
Showing 1 changed file with 67 additions and 5 deletions.
72 changes: 67 additions & 5 deletions src/Magnum/Test/MeshGLTest.cpp
Expand Up @@ -106,6 +106,10 @@ class MeshGLTest: public AbstractOpenGLTester {
void setIndexBuffer();
void setIndexBufferRange();
void setIndexBufferUnsignedInt();

#ifndef MAGNUM_TARGET_GLES
void setBaseVertex();
#endif
};

MeshGLTest::MeshGLTest() {
Expand Down Expand Up @@ -168,7 +172,12 @@ MeshGLTest::MeshGLTest() {

&MeshGLTest::setIndexBuffer,
&MeshGLTest::setIndexBufferRange,
&MeshGLTest::setIndexBufferUnsignedInt});
&MeshGLTest::setIndexBufferUnsignedInt,

#ifndef MAGNUM_TARGET_GLES
&MeshGLTest::setBaseVertex
#endif
});
}

void MeshGLTest::construct() {
Expand Down Expand Up @@ -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<class T> T Checker::get(ColorFormat format, ColorType type) {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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() {
Expand Down Expand Up @@ -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<Float, UnsignedByte>(64),
Math::normalize<Float, UnsignedByte>(17),
Math::normalize<Float, UnsignedByte>(56),
Math::normalize<Float, UnsignedByte>(15),
Math::normalize<Float, UnsignedByte>(164),
Math::normalize<Float, UnsignedByte>(17),
Math::normalize<Float, UnsignedByte>(97),
Math::normalize<Float, UnsignedByte>(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)

0 comments on commit 2834e60

Please sign in to comment.