diff --git a/src/Magnum/DebugTools/BufferData.h b/src/Magnum/DebugTools/BufferData.h index e4d988c74..178a13a57 100644 --- a/src/Magnum/DebugTools/BufferData.h +++ b/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 Containers::Array inline bufferSubData(GL::Buffer& buffer, GLintptr offset, GLsizeiptr size) { + if(!size) return {}; #if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_WEBGL) Containers::Array data = buffer.subData(offset, size*sizeof(T)); CORRADE_INTERNAL_ASSERT(!data.deleter()); return Containers::Array{reinterpret_cast(data.release()), std::size_t(size)}; #else Containers::Array 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 } diff --git a/src/Magnum/DebugTools/Test/BufferDataGLTest.cpp b/src/Magnum/DebugTools/Test/BufferDataGLTest.cpp index c1c31f51f..057a3fe8c 100644 --- a/src/Magnum/DebugTools/Test/BufferDataGLTest.cpp +++ b/src/Magnum/DebugTools/Test/BufferDataGLTest.cpp @@ -53,6 +53,11 @@ void BufferDataGLTest::data() { #endif GL::Buffer buffer; + + const Containers::Array emptyContents = bufferData(buffer); + MAGNUM_VERIFY_NO_GL_ERROR(); + CORRADE_VERIFY(emptyContents.isEmpty()); + buffer.setData(Data, GL::BufferUsage::StaticDraw); const Containers::Array contents = bufferData(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 emptyContents = bufferSubData(buffer, 4, 0); + MAGNUM_VERIFY_NO_GL_ERROR(); + CORRADE_VERIFY(emptyContents.isEmpty()); } }}}}