Browse Source

Added test for mesh base vertex.

pull/51/head
Vladimír Vondruš 12 years ago
parent
commit
2834e6029e
  1. 72
      src/Magnum/Test/MeshGLTest.cpp

72
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<class T> 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<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)

Loading…
Cancel
Save