Browse Source

Cleanup and code reorganization in MeshGLTest.

pull/54/head
Vladimír Vondruš 12 years ago
parent
commit
2ea0a416ed
  1. 85
      src/Magnum/Test/MeshGLTest.cpp

85
src/Magnum/Test/MeshGLTest.cpp

@ -406,7 +406,10 @@ Checker::Checker(AbstractShaderProgram&& shader, RenderbufferFormat format, Mesh
.setCount(2); .setCount(2);
/* Skip first vertex so we test also offsets */ /* Skip first vertex so we test also offsets */
MeshView(mesh).setCount(1).setBaseVertex(1).draw(shader); MeshView(mesh)
.setCount(1)
.setBaseVertex(1)
.draw(shader);
} }
template<class T> T Checker::get(ColorFormat format, ColorType type) { template<class T> T Checker::get(ColorFormat format, ColorType type) {
@ -1117,7 +1120,7 @@ void MeshGLTest::addVertexBufferMultipleGaps() {
namespace { namespace {
struct IndexChecker { struct IndexChecker {
explicit IndexChecker(Mesh& mesh, Int baseVertex = 0); explicit IndexChecker(Mesh& mesh);
Color4ub get(); Color4ub get();
Renderbuffer renderbuffer; Renderbuffer renderbuffer;
@ -1127,7 +1130,7 @@ namespace {
const Float indexedVertexData[] = { const Float indexedVertexData[] = {
0.0f, /* Offset */ 0.0f, /* Offset */
/* First attribute */ /* First vertex */
Math::normalize<Float, UnsignedByte>(64), Math::normalize<Float, UnsignedByte>(64),
Math::normalize<Float, UnsignedByte>(17), Math::normalize<Float, UnsignedByte>(17),
Math::normalize<Float, UnsignedByte>(56), Math::normalize<Float, UnsignedByte>(56),
@ -1137,7 +1140,36 @@ namespace {
Math::normalize<Float, UnsignedByte>(97), Math::normalize<Float, UnsignedByte>(97),
Math::normalize<Float, UnsignedByte>(28), Math::normalize<Float, UnsignedByte>(28),
/* Second attribute */ /* Second vertex */
0.3f, 0.1f, 0.5f,
0.4f, 0.0f, -0.9f,
1.0f, -0.5f
};
const Float indexedVertexDataBaseVertex[] = {
0.0f, 0.0f, /* Offset */
/* First vertex */
0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f,
0.0f, 0.0f,
/* Second vertex */
0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f,
0.0f, 0.0f,
/* Third vertex */
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 vertex */
0.3f, 0.1f, 0.5f, 0.3f, 0.1f, 0.5f,
0.4f, 0.0f, -0.9f, 0.4f, 0.0f, -0.9f,
1.0f, -0.5f 1.0f, -0.5f
@ -1147,7 +1179,7 @@ namespace {
} }
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
IndexChecker::IndexChecker(Mesh& mesh, Int baseVertex): framebuffer({{}, Vector2i(1)}) { IndexChecker::IndexChecker(Mesh& mesh): framebuffer({{}, Vector2i(1)}) {
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
renderbuffer.setStorage(RenderbufferFormat::RGBA8, Vector2i(1)); renderbuffer.setStorage(RenderbufferFormat::RGBA8, Vector2i(1));
#else #else
@ -1160,7 +1192,11 @@ IndexChecker::IndexChecker(Mesh& mesh, Int baseVertex): framebuffer({{}, Vector2
.setCount(2); .setCount(2);
/* Skip first vertex so we test also offsets */ /* Skip first vertex so we test also offsets */
MeshView(mesh).setCount(1).setBaseVertex(baseVertex).setIndexRange(1).draw(MultipleShader{}); MeshView(mesh)
.setCount(1)
.setBaseVertex(mesh.baseVertex())
.setIndexRange(1)
.draw(MultipleShader{});
} }
Color4ub IndexChecker::get() { Color4ub IndexChecker::get() {
@ -1240,51 +1276,22 @@ void MeshGLTest::setIndexBufferUnsignedInt() {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void MeshGLTest::setBaseVertex() { 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; Buffer vertices;
vertices.setData(indexedVertexData, BufferUsage::StaticDraw); vertices.setData(indexedVertexDataBaseVertex, BufferUsage::StaticDraw);
constexpr UnsignedShort indexData[] = { 2, 1, 0 }; constexpr UnsignedShort indexData[] = { 2, 1, 0 };
Buffer indices(Buffer::Target::ElementArray); Buffer indices(Buffer::Target::ElementArray);
indices.setData(indexData, BufferUsage::StaticDraw); indices.setData(indexData, BufferUsage::StaticDraw);
Mesh mesh; Mesh mesh;
mesh.addVertexBuffer(vertices, 2*4, MultipleShader::Position(), mesh.setBaseVertex(2)
.addVertexBuffer(vertices, 2*4, MultipleShader::Position(),
MultipleShader::Normal(), MultipleShader::TextureCoordinates()) MultipleShader::Normal(), MultipleShader::TextureCoordinates())
.setIndexBuffer(indices, 2, Mesh::IndexType::UnsignedShort); .setIndexBuffer(indices, 2, Mesh::IndexType::UnsignedShort);
MAGNUM_VERIFY_NO_ERROR(); MAGNUM_VERIFY_NO_ERROR();
/* base vertex is 2 */ const auto value = IndexChecker(mesh).get();
const auto value = IndexChecker(mesh, 2).get();
MAGNUM_VERIFY_NO_ERROR(); MAGNUM_VERIFY_NO_ERROR();
CORRADE_COMPARE(value, indexedResult); CORRADE_COMPARE(value, indexedResult);

Loading…
Cancel
Save