Browse Source

GL: assert that addVertexBuffer() is called with a valid Buffer.

pull/255/head
Vladimír Vondruš 8 years ago
parent
commit
16558c8877
  1. 4
      src/Magnum/GL/Mesh.cpp
  2. 2
      src/Magnum/GL/Test/CMakeLists.txt
  3. 34
      src/Magnum/GL/Test/MeshGLTest.cpp

4
src/Magnum/GL/Mesh.cpp

@ -338,6 +338,8 @@ Mesh& Mesh::addVertexBufferInstanced(Buffer& buffer, const UnsignedInt divisor,
}
Mesh& Mesh::setIndexBuffer(Buffer& buffer, GLintptr offset, MeshIndexType type, UnsignedInt start, UnsignedInt end) {
CORRADE_ASSERT(buffer.id(),
"GL::Mesh::setIndexBuffer(): empty or moved-out Buffer instance was passed", *this);
#ifdef MAGNUM_TARGET_WEBGL
CORRADE_ASSERT(buffer.targetHint() == Buffer::TargetHint::ElementArray,
"GL::Mesh::setIndexBuffer(): the buffer has unexpected target hint, expected" << Buffer::TargetHint::ElementArray << "but got" << buffer.targetHint(), *this);
@ -595,6 +597,8 @@ void Mesh::attributePointerInternal(const Buffer& buffer, const GLuint location,
}
void Mesh::attributePointerInternal(AttributeLayout& attribute) {
CORRADE_ASSERT(attribute.buffer.id(),
"GL::Mesh::addVertexBuffer(): empty or moved-out Buffer instance was passed", );
(this->*Context::current().state().mesh->attributePointerImplementation)(attribute);
}

2
src/Magnum/GL/Test/CMakeLists.txt

@ -109,7 +109,7 @@ if(BUILD_GL_TESTS)
corrade_add_test(GLContextGLTest ContextGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLCubeMapTextureGLTest CubeMapTextureGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLFramebufferGLTest FramebufferGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLMeshGLTest MeshGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLMeshGLTest MeshGLTest.cpp LIBRARIES MagnumGLTestLib MagnumOpenGLTester)
corrade_add_test(GLRenderbufferGLTest RenderbufferGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLTextureGLTest TextureGLTest.cpp LIBRARIES MagnumOpenGLTester)

34
src/Magnum/GL/Test/MeshGLTest.cpp

@ -23,6 +23,8 @@
DEALINGS IN THE SOFTWARE.
*/
#include <sstream>
#include "Magnum/Image.h"
#include "Magnum/Mesh.h"
#include "Magnum/GL/AbstractShaderProgram.h"
@ -115,10 +117,14 @@ struct MeshGLTest: OpenGLTester {
void addVertexBufferMultiple();
void addVertexBufferMultipleGaps();
void addVertexBufferMovedOutInstance();
template<class T> void setIndexBuffer();
template<class T> void setIndexBufferRange();
void setIndexBufferUnsignedInt();
void setIndexBufferMovedOutInstance();
void unbindVAOWhenSettingIndexBufferData();
void unbindVAOBeforeEnteringExternalSection();
@ -220,12 +226,16 @@ MeshGLTest::MeshGLTest() {
addTests({&MeshGLTest::addVertexBufferMultiple,
&MeshGLTest::addVertexBufferMultipleGaps,
&MeshGLTest::addVertexBufferMovedOutInstance,
&MeshGLTest::setIndexBuffer<GL::MeshIndexType>,
&MeshGLTest::setIndexBuffer<Magnum::MeshIndexType>,
&MeshGLTest::setIndexBufferRange<GL::MeshIndexType>,
&MeshGLTest::setIndexBufferRange<Magnum::MeshIndexType>,
&MeshGLTest::setIndexBufferUnsignedInt,
&MeshGLTest::setIndexBufferMovedOutInstance,
&MeshGLTest::unbindVAOWhenSettingIndexBufferData,
&MeshGLTest::unbindVAOBeforeEnteringExternalSection,
@ -1641,6 +1651,18 @@ void MeshGLTest::addVertexBufferMultipleGaps() {
CORRADE_COMPARE(value, Color4ub(64 + 15 + 97, 17 + 164 + 28, 56 + 17, 255));
}
void MeshGLTest::addVertexBufferMovedOutInstance() {
Buffer buffer{NoCreate};
Mesh mesh;
std::ostringstream out;
Error redirectError{&out};
mesh.addVertexBuffer(buffer, 0, Attribute<0, Float>{});
CORRADE_COMPARE(out.str(), "GL::Mesh::addVertexBuffer(): empty or moved-out Buffer instance was passed\n");
}
namespace {
const Float indexedVertexData[] = {
0.0f, /* Offset */
@ -1795,6 +1817,18 @@ void MeshGLTest::setIndexBufferUnsignedInt() {
CORRADE_COMPARE(value, indexedResult);
}
void MeshGLTest::setIndexBufferMovedOutInstance() {
Buffer buffer{NoCreate};
Mesh mesh;
std::ostringstream out;
Error redirectError{&out};
mesh.setIndexBuffer(buffer, 0, MeshIndexType::UnsignedByte);
CORRADE_COMPARE(out.str(), "GL::Mesh::setIndexBuffer(): empty or moved-out Buffer instance was passed\n");
}
void MeshGLTest::unbindVAOWhenSettingIndexBufferData() {
#ifndef MAGNUM_TARGET_GLES
if(!Context::current().isExtensionSupported<Extensions::ARB::vertex_array_object>())

Loading…
Cancel
Save