|
|
|
@ -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); |
|
|
|
|