diff --git a/src/Magnum/GL/Buffer.cpp b/src/Magnum/GL/Buffer.cpp index 00f4d8449..3af14aab6 100644 --- a/src/Magnum/GL/Buffer.cpp +++ b/src/Magnum/GL/Buffer.cpp @@ -310,6 +310,10 @@ Buffer& Buffer::setStorage(const Containers::ArrayView data, const S (this->*Context::current().state().buffer.storageImplementation)(data, flags); return *this; } + +Buffer& Buffer::setStorage(const std::size_t size, const StorageFlags flags) { + return setStorage({nullptr, size}, flags); +} #endif Int Buffer::size() { diff --git a/src/Magnum/GL/Test/BufferGLTest.cpp b/src/Magnum/GL/Test/BufferGLTest.cpp index 873ce69b7..830da5998 100644 --- a/src/Magnum/GL/Test/BufferGLTest.cpp +++ b/src/Magnum/GL/Test/BufferGLTest.cpp @@ -56,6 +56,7 @@ struct BufferGLTest: OpenGLTester { #ifndef MAGNUM_TARGET_GLES void storage(); + void storagePreinitialized(); #endif void data(); @@ -87,6 +88,7 @@ BufferGLTest::BufferGLTest() { #ifndef MAGNUM_TARGET_GLES &BufferGLTest::storage, + &BufferGLTest::storagePreinitialized, #endif &BufferGLTest::data, @@ -254,6 +256,26 @@ void BufferGLTest::bindRange() { #ifndef MAGNUM_TARGET_GLES void BufferGLTest::storage() { + if(!Context::current().isExtensionSupported()) + CORRADE_SKIP(Extensions::ARB::buffer_storage::string() << "is not supported."); + + Buffer buffer; + + constexpr Int data[] = {2, 7, 5, 13, 25}; + + buffer.setStorage(sizeof(data), Buffer::StorageFlag::DynamicStorage) + .setSubData(0, data); + MAGNUM_VERIFY_NO_GL_ERROR(); + + CORRADE_COMPARE_AS(Containers::arrayCast(buffer.data()), + Containers::arrayView(data), + TestSuite::Compare::Container); +} + +void BufferGLTest::storagePreinitialized() { + if(!Context::current().isExtensionSupported()) + CORRADE_SKIP(Extensions::ARB::buffer_storage::string() << "is not supported."); + Buffer buffer; constexpr Int data[] = {2, 7, 5, 13, 25};