Browse Source

DebugTools: handle and test size 0 in bufferData()/bufferSubData() for all cases

pull/560/head
Pablo Escobar 4 years ago
parent
commit
63dd31528f
  1. 3
      src/Magnum/DebugTools/BufferData.h
  2. 9
      src/Magnum/DebugTools/Test/BufferDataGLTest.cpp

3
src/Magnum/DebugTools/BufferData.h

@ -60,13 +60,14 @@ WebGL 2.0 it's just an alias to @ref GL::Buffer::subData().
WebGL 1.0.
*/
template<class T> Containers::Array<T> inline bufferSubData(GL::Buffer& buffer, GLintptr offset, GLsizeiptr size) {
if(!size) return {};
#if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_WEBGL)
Containers::Array<char> data = buffer.subData(offset, size*sizeof(T));
CORRADE_INTERNAL_ASSERT(!data.deleter());
return Containers::Array<T>{reinterpret_cast<T*>(data.release()), std::size_t(size)};
#else
Containers::Array<T> data{std::size_t(size)};
if(size) Implementation::bufferSubData(buffer, offset, size*sizeof(T), data);
Implementation::bufferSubData(buffer, offset, size*sizeof(T), data);
return data;
#endif
}

9
src/Magnum/DebugTools/Test/BufferDataGLTest.cpp

@ -53,6 +53,11 @@ void BufferDataGLTest::data() {
#endif
GL::Buffer buffer;
const Containers::Array<Int> emptyContents = bufferData<Int>(buffer);
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_VERIFY(emptyContents.isEmpty());
buffer.setData(Data, GL::BufferUsage::StaticDraw);
const Containers::Array<Int> contents = bufferData<Int>(buffer);
MAGNUM_VERIFY_NO_GL_ERROR();
@ -72,6 +77,10 @@ void BufferDataGLTest::subData() {
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(contents, Containers::arrayView(Data).slice(1, 4),
TestSuite::Compare::Container);
const Containers::Array<Int> emptyContents = bufferSubData<Int>(buffer, 4, 0);
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_VERIFY(emptyContents.isEmpty());
}
}}}}

Loading…
Cancel
Save