Browse Source

DebugTools: make bufferData()/bufferSubData() available on WebGL 2.0

pull/560/head
Pablo Escobar 4 years ago
parent
commit
b929cf41fa
  1. 22
      src/Magnum/DebugTools/BufferData.h
  2. 2
      src/Magnum/DebugTools/CMakeLists.txt
  3. 2
      src/Magnum/DebugTools/Test/CMakeLists.txt

22
src/Magnum/DebugTools/BufferData.h

@ -25,7 +25,7 @@
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
*/ */
#if defined(MAGNUM_TARGET_GL) && !defined(MAGNUM_TARGET_WEBGL) #if defined(MAGNUM_TARGET_GL) && !(defined(MAGNUM_TARGET_WEBGL) && defined(MAGNUM_TARGET_GLES2))
/** @file /** @file
* @brief Function @ref Magnum::DebugTools::bufferData(), @ref Magnum::DebugTools::bufferSubData() * @brief Function @ref Magnum::DebugTools::bufferData(), @ref Magnum::DebugTools::bufferSubData()
*/ */
@ -36,7 +36,7 @@
#include "Magnum/GL/Buffer.h" #include "Magnum/GL/Buffer.h"
#include "Magnum/DebugTools/visibility.h" #include "Magnum/DebugTools/visibility.h"
#if defined(MAGNUM_TARGET_GL) && !defined(MAGNUM_TARGET_WEBGL) #if defined(MAGNUM_TARGET_GL) && !(defined(MAGNUM_TARGET_WEBGL) && defined(MAGNUM_TARGET_GLES2))
namespace Magnum { namespace DebugTools { namespace Magnum { namespace DebugTools {
namespace Implementation { namespace Implementation {
@ -47,8 +47,8 @@ namespace Implementation {
@brief Buffer subdata @brief Buffer subdata
Emulates @ref GL::Buffer::subData() call on platforms that don't support it Emulates @ref GL::Buffer::subData() call on platforms that don't support it
(such as OpenGL ES) by using @ref GL::Buffer::mapRead(). On desktop GL it's (such as OpenGL ES) by using @ref GL::Buffer::mapRead(). On desktop GL and
just an alias to @ref GL::Buffer::subData(). WebGL 2.0 it's just an alias to @ref GL::Buffer::subData().
@note This function is available only if Magnum is compiled with @note This function is available only if Magnum is compiled with
@ref MAGNUM_TARGET_GL "TARGET_GL" enabled (done by default). See @ref MAGNUM_TARGET_GL "TARGET_GL" enabled (done by default). See
@ -56,10 +56,11 @@ just an alias to @ref GL::Buffer::subData().
@requires_gles30 Extension @gl_extension{EXT,map_buffer_range} in OpenGL ES @requires_gles30 Extension @gl_extension{EXT,map_buffer_range} in OpenGL ES
2.0. 2.0.
@requires_gles Buffer mapping is not available in WebGL. @requires_webgl20 Buffer data queries or buffer mapping are not available in
WebGL 1.0.
*/ */
template<class T> Containers::Array<T> inline bufferSubData(GL::Buffer& buffer, GLintptr offset, GLsizeiptr size) { template<class T> Containers::Array<T> inline bufferSubData(GL::Buffer& buffer, GLintptr offset, GLsizeiptr size) {
#ifndef MAGNUM_TARGET_GLES #if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_WEBGL)
Containers::Array<char> data = buffer.subData(offset, size*sizeof(T)); Containers::Array<char> data = buffer.subData(offset, size*sizeof(T));
CORRADE_INTERNAL_ASSERT(!data.deleter()); CORRADE_INTERNAL_ASSERT(!data.deleter());
return Containers::Array<T>{reinterpret_cast<T*>(data.release()), std::size_t(size)}; return Containers::Array<T>{reinterpret_cast<T*>(data.release()), std::size_t(size)};
@ -74,8 +75,8 @@ template<class T> Containers::Array<T> inline bufferSubData(GL::Buffer& buffer,
@brief Buffer data @brief Buffer data
Emulates @ref GL::Buffer::data() call on platforms that don't support it (such Emulates @ref GL::Buffer::data() call on platforms that don't support it (such
as OpenGL ES) by using @ref GL::Buffer::mapRead(). On desktop GL it's just an as OpenGL ES) by using @ref GL::Buffer::mapRead(). On desktop GL and WebGL 2.0
alias to @ref GL::Buffer::data(). it's just an alias to @ref GL::Buffer::data().
@note This function is available only if Magnum is compiled with @note This function is available only if Magnum is compiled with
@ref MAGNUM_TARGET_GL "TARGET_GL" enabled (done by default). See @ref MAGNUM_TARGET_GL "TARGET_GL" enabled (done by default). See
@ -83,7 +84,8 @@ alias to @ref GL::Buffer::data().
@requires_gles30 Extension @gl_extension{EXT,map_buffer_range} in OpenGL ES @requires_gles30 Extension @gl_extension{EXT,map_buffer_range} in OpenGL ES
2.0. 2.0.
@requires_gles Buffer mapping is not available in WebGL. @requires_webgl20 Buffer data queries or buffer mapping are not available in
WebGL 1.0.
*/ */
template<class T = char> Containers::Array<T> inline bufferData(GL::Buffer& buffer) { template<class T = char> Containers::Array<T> inline bufferData(GL::Buffer& buffer) {
const Int bufferSize = buffer.size(); const Int bufferSize = buffer.size();
@ -93,7 +95,7 @@ template<class T = char> Containers::Array<T> inline bufferData(GL::Buffer& buff
}} }}
#else #else
#error this header is available only in the OpenGL (ES) build and not available in the WebGL build #error this header is not available in the WebGL 1.0 build
#endif #endif
#endif #endif

2
src/Magnum/DebugTools/CMakeLists.txt

@ -72,7 +72,7 @@ if(TARGET_GL)
endif() endif()
endif() endif()
if(NOT MAGNUM_TARGET_WEBGL) if(NOT (MAGNUM_TARGET_WEBGL AND MAGNUM_TARGET_GLES2))
list(APPEND MagnumDebugTools_SRCS list(APPEND MagnumDebugTools_SRCS
BufferData.cpp) BufferData.cpp)

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

@ -118,7 +118,7 @@ if(TARGET_GL)
corrade_add_test(DebugToolsTextureImageGLTest TextureImageGLTest.cpp corrade_add_test(DebugToolsTextureImageGLTest TextureImageGLTest.cpp
LIBRARIES MagnumDebugTools MagnumOpenGLTester) LIBRARIES MagnumDebugTools MagnumOpenGLTester)
if(NOT MAGNUM_TARGET_WEBGL) if(NOT (MAGNUM_TARGET_WEBGL AND MAGNUM_TARGET_GLES2))
corrade_add_test(DebugToolsBufferDataGLTest BufferDataGLTest.cpp corrade_add_test(DebugToolsBufferDataGLTest BufferDataGLTest.cpp
LIBRARIES MagnumDebugTools MagnumOpenGLTester) LIBRARIES MagnumDebugTools MagnumOpenGLTester)
endif() endif()

Loading…
Cancel
Save