Browse Source

Clarified and updated *Framebuffer::mapForDraw() implementations.

In OpenGL ES 2.0 there is EXT_draw_buffers, which I overlooked somehow,
so I added it to extension list and included in the implementation. It
combines NV_draw_buffers and NV_fbo_color_attachments, so the
implementation now selects one of the two based on which extension is
supported, preferring the EXT one. Updated the documentation to be
less confusing, fixed extension links. Also the single-output
mapForDraw() is not handled separately on ES anymore and just calls
DrawBuffers implementation with single parameter, resulting in less
generated code.

EXT_draw_buffers can also be called on default framebuffer and
apparently in ES there is no way to map front framebuffer for drawing,
so I removed it from the DefaultFramebuffer::DrawAttachment enum.
pull/107/head
Vladimír Vondruš 11 years ago
parent
commit
db1142837c
  1. 1
      doc/opengl-support.dox
  2. 46
      src/Magnum/AbstractFramebuffer.cpp
  3. 11
      src/Magnum/AbstractFramebuffer.h
  4. 1
      src/Magnum/Context.cpp
  5. 6
      src/Magnum/DefaultFramebuffer.cpp
  6. 34
      src/Magnum/DefaultFramebuffer.h
  7. 3
      src/Magnum/Extensions.h
  8. 9
      src/Magnum/Framebuffer.cpp
  9. 23
      src/Magnum/Framebuffer.h
  10. 15
      src/Magnum/Implementation/FramebufferState.cpp
  11. 2
      src/Magnum/Implementation/FramebufferState.h
  12. 5
      src/Magnum/Test/FramebufferGLTest.cpp
  13. 1
      src/MagnumExternal/OpenGL/GLES2/extensions.txt
  14. 3
      src/MagnumExternal/OpenGL/GLES2/flextGL.cpp
  15. 42
      src/MagnumExternal/OpenGL/GLES2/flextGL.h
  16. 41
      src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h
  17. 44
      src/MagnumExternal/OpenGL/GLES2/flextGLNaCl.h
  18. 3
      src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp

1
doc/opengl-support.dox

@ -304,6 +304,7 @@ Extension | Status
@es_extension{EXT,texture_rg} | done
@es_extension{EXT,texture_storage} | done
@es_extension{EXT,map_buffer_range} | done
@es_extension{EXT,draw_buffers} | done
@es_extension{EXT,instanced_arrays} | done
@es_extension2{EXT,draw_instanced,draw_instanced} | done
@es_extension{NV,draw_buffers} | done

46
src/Magnum/AbstractFramebuffer.cpp

@ -49,7 +49,8 @@ Vector2i AbstractFramebuffer::maxViewportSize() {
Int AbstractFramebuffer::maxDrawBuffers() {
#ifdef MAGNUM_TARGET_GLES2
if(!Context::current()->isExtensionSupported<Extensions::GL::NV::draw_buffers>())
if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::draw_buffers>() &&
!Context::current()->isExtensionSupported<Extensions::GL::NV::draw_buffers>())
return 0;
#endif
@ -60,7 +61,7 @@ Int AbstractFramebuffer::maxDrawBuffers() {
#ifndef MAGNUM_TARGET_GLES2
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &value);
#else
glGetIntegerv(GL_MAX_DRAW_BUFFERS_NV, &value);
glGetIntegerv(GL_MAX_DRAW_BUFFERS_EXT, &value);
#endif
}
@ -358,18 +359,11 @@ GLenum AbstractFramebuffer::checkStatusImplementationDSAEXT(const FramebufferTar
}
#endif
#ifndef MAGNUM_TARGET_GLES2
void AbstractFramebuffer::drawBuffersImplementationDefault(GLsizei count, const GLenum* buffers) {
bindInternal(FramebufferTarget::Draw);
#ifndef MAGNUM_TARGET_GLES2
glDrawBuffers(count, buffers);
#elif !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_NACL)
glDrawBuffersNV(count, buffers);
#else
static_cast<void>(count);
static_cast<void>(buffers);
CORRADE_ASSERT_UNREACHABLE();
#endif
}
#ifndef MAGNUM_TARGET_GLES
@ -382,23 +376,39 @@ void AbstractFramebuffer::drawBuffersImplementationDSAEXT(GLsizei count, const G
glFramebufferDrawBuffersEXT(_id, count, buffers);
}
#endif
#else
void AbstractFramebuffer::drawBuffersImplementationEXT(GLsizei count, const GLenum* buffers) {
bindInternal(FramebufferTarget::Draw);
void AbstractFramebuffer::drawBufferImplementationDefault(GLenum buffer) {
#if !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_NACL)
glDrawBuffersEXT(count, buffers);
#else
static_cast<void>(count);
static_cast<void>(buffers);
CORRADE_ASSERT_UNREACHABLE();
#endif
}
void AbstractFramebuffer::drawBuffersImplementationNV(GLsizei count, const GLenum* buffers) {
bindInternal(FramebufferTarget::Draw);
#ifndef MAGNUM_TARGET_GLES
glDrawBuffer(buffer);
#elif !defined(MAGNUM_TARGET_GLES2)
glDrawBuffers(1, &buffer);
#elif !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_NACL)
glDrawBuffersNV(1, &buffer);
#if !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_NACL)
glDrawBuffersNV(count, buffers);
#else
static_cast<void>(buffer);
static_cast<void>(count);
static_cast<void>(buffers);
CORRADE_ASSERT_UNREACHABLE();
#endif
}
#endif
#ifndef MAGNUM_TARGET_GLES
void AbstractFramebuffer::drawBufferImplementationDefault(GLenum buffer) {
bindInternal(FramebufferTarget::Draw);
glDrawBuffer(buffer);
}
void AbstractFramebuffer::drawBufferImplementationDSA(const GLenum buffer) {
glNamedFramebufferDrawBuffer(_id, buffer);
}

11
src/Magnum/AbstractFramebuffer.h

@ -197,8 +197,8 @@ class MAGNUM_EXPORT AbstractFramebuffer {
* @brief Max supported draw buffer count
*
* The result is cached, repeated queries don't result in repeated
* OpenGL calls. If ES extension @extension{NV,draw_buffers} is not
* available, returns `0`.
* OpenGL calls. In OpenGL ES 2.0, if neither @es_extension{EXT,draw_buffers}
* nor @es_extension{NV,draw_buffers} is available, returns `0`.
* @see @ref DefaultFramebuffer::mapForDraw(), @ref Framebuffer::mapForDraw(),
* @fn_gl{Get} with @def_gl{MAX_DRAW_BUFFERS}
*/
@ -424,14 +424,19 @@ class MAGNUM_EXPORT AbstractFramebuffer {
GLenum MAGNUM_LOCAL checkStatusImplementationDSAEXT(FramebufferTarget target);
#endif
#ifndef MAGNUM_TARGET_GLES2
void MAGNUM_LOCAL drawBuffersImplementationDefault(GLsizei count, const GLenum* buffers);
#ifndef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL drawBuffersImplementationDSA(GLsizei count, const GLenum* buffers);
void MAGNUM_LOCAL drawBuffersImplementationDSAEXT(GLsizei count, const GLenum* buffers);
#endif
#else
void MAGNUM_LOCAL drawBuffersImplementationEXT(GLsizei count, const GLenum* buffers);
void MAGNUM_LOCAL drawBuffersImplementationNV(GLsizei count, const GLenum* buffers);
#endif
void MAGNUM_LOCAL drawBufferImplementationDefault(GLenum buffer);
#ifndef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL drawBufferImplementationDefault(GLenum buffer);
void MAGNUM_LOCAL drawBufferImplementationDSA(GLenum buffer);
void MAGNUM_LOCAL drawBufferImplementationDSAEXT(GLenum buffer);
#endif

1
src/Magnum/Context.cpp

@ -266,6 +266,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,EXT,texture_rg),
_extension(GL,EXT,texture_storage),
_extension(GL,EXT,map_buffer_range),
_extension(GL,EXT,draw_buffers),
_extension(GL,EXT,instanced_arrays),
_extension(GL,EXT,draw_instanced),
_extension(GL,NV,draw_buffers),

6
src/Magnum/DefaultFramebuffer.cpp

@ -45,7 +45,6 @@ DefaultFramebuffer::Status DefaultFramebuffer::checkStatus(const FramebufferTarg
return Status((this->*Context::current()->state().framebuffer->checkStatusImplementation)(target));
}
#ifndef MAGNUM_TARGET_GLES2
DefaultFramebuffer& DefaultFramebuffer::mapForDraw(std::initializer_list<std::pair<UnsignedInt, DrawAttachment>> attachments) {
/* Max attachment location */
std::size_t max = 0;
@ -64,10 +63,13 @@ DefaultFramebuffer& DefaultFramebuffer::mapForDraw(std::initializer_list<std::pa
}
DefaultFramebuffer& DefaultFramebuffer::mapForDraw(const DrawAttachment attachment) {
#ifndef MAGNUM_TARGET_GLES
(this->*Context::current()->state().framebuffer->drawBufferImplementation)(GLenum(attachment));
#else
(this->*Context::current()->state().framebuffer->drawBuffersImplementation)(1, reinterpret_cast<const GLenum*>(&attachment));
#endif
return *this;
}
#endif
DefaultFramebuffer& DefaultFramebuffer::mapForRead(const ReadAttachment attachment) {
(this->*Context::current()->state().framebuffer->readBufferImplementation)(GLenum(attachment));

34
src/Magnum/DefaultFramebuffer.h

@ -105,13 +105,12 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer {
#endif
};
#ifndef MAGNUM_TARGET_GLES2
/**
* @brief Draw attachment
*
* @see @ref mapForDraw()
* @requires_gles30 Draw attachments for default framebuffer are
* available only in OpenGL ES 3.0.
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} in OpenGL
* ES 2.0.
*/
enum class DrawAttachment: GLenum {
/** Don't use the output. */
@ -150,24 +149,11 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer {
* @ref DrawAttachment::BackLeft.
*/
#ifdef MAGNUM_TARGET_GLES
Back = GL_BACK,
#else
Back = GL_BACK_LEFT,
#endif
/**
* Write output to front buffer.
*
* On desktop OpenGL, this is equal to
* @ref DrawAttachment::FrontLeft.
*/
#ifdef MAGNUM_TARGET_GLES
Front = GL_FRONT
Back = GL_BACK
#else
Front = GL_FRONT_LEFT
Back = GL_BACK_LEFT
#endif
};
#endif
/**
* @brief Read attachment
@ -328,7 +314,6 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer {
*/
Status checkStatus(FramebufferTarget target);
#ifndef MAGNUM_TARGET_GLES2
/**
* @brief Map shader outputs to buffer attachment
* @return Reference to self (for method chaining)
@ -338,7 +323,7 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer {
* can achieve the same by passing @ref DrawAttachment::None as
* attachment. Example usage:
* @code
* defaultFramebuffer.mapForDraw({{MyShader::ColorOutput, DefaultFramebuffer::DrawAttachment::BackLeft},
* defaultFramebuffer.mapForDraw({{MyShader::ColorOutput, DefaultFramebuffer::DrawAttachment::Back},
* {MyShader::NormalOutput, DefaultFramebuffer::DrawAttachment::None}});
* @endcode
*
@ -349,8 +334,8 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer {
* @ref mapForRead(), @fn_gl2{NamedFramebufferDrawBuffers,DrawBuffers},
* @fn_gl_extension{FramebufferDrawBuffers,EXT,direct_state_access},
* eventually @fn_gl{BindFramebuffer} and @fn_gl{DrawBuffers}
* @requires_gles30 Draw attachments for default framebuffer are
* available only in OpenGL ES 3.0.
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} in OpenGL
* ES 2.0.
*/
DefaultFramebuffer& mapForDraw(std::initializer_list<std::pair<UnsignedInt, DrawAttachment>> attachments);
@ -369,11 +354,10 @@ class MAGNUM_EXPORT DefaultFramebuffer: public AbstractFramebuffer {
* @fn_gl_extension{FramebufferDrawBuffer,EXT,direct_state_access},
* eventually @fn_gl{BindFramebuffer} and @fn_gl{DrawBuffer} or
* @fn_gl{DrawBuffers} in OpenGL ES 3.0
* @requires_gles30 Draw attachments for default framebuffer are
* available only in OpenGL ES 3.0.
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} in OpenGL
* ES 2.0.
*/
DefaultFramebuffer& mapForDraw(DrawAttachment attachment);
#endif
/**
* @brief Map given attachment for reading

3
src/Magnum/Extensions.h

@ -285,6 +285,9 @@ namespace GL {
_extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121
#endif
_extension(GL,EXT,disjoint_timer_query, GLES200, None) // #150
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,draw_buffers, GLES200, GLES300) // #151
#endif
_extension(GL,EXT,texture_sRGB_decode, GLES200, None) // #152
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,instanced_arrays, GLES200, GLES300) // #156

9
src/Magnum/Framebuffer.cpp

@ -62,7 +62,8 @@ const Framebuffer::InvalidationAttachment Framebuffer::InvalidationAttachment::S
Int Framebuffer::maxColorAttachments() {
#ifdef MAGNUM_TARGET_GLES2
if(!Context::current()->isExtensionSupported<Extensions::GL::NV::fbo_color_attachments>())
if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::draw_buffers>() &&
!Context::current()->isExtensionSupported<Extensions::GL::NV::fbo_color_attachments>())
return 0;
#endif
@ -72,7 +73,7 @@ Int Framebuffer::maxColorAttachments() {
#ifndef MAGNUM_TARGET_GLES2
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &value);
#else
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_NV, &value);
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &value);
#endif
}
@ -153,7 +154,11 @@ Framebuffer& Framebuffer::mapForDraw(std::initializer_list<std::pair<UnsignedInt
}
Framebuffer& Framebuffer::mapForDraw(const DrawAttachment attachment) {
#ifndef MAGNUM_TARGET_GLES
(this->*Context::current()->state().framebuffer->drawBufferImplementation)(GLenum(attachment));
#else
(this->*Context::current()->state().framebuffer->drawBuffersImplementation)(1, reinterpret_cast<const GLenum*>(&attachment));
#endif
return *this;
}

23
src/Magnum/Framebuffer.h

@ -102,7 +102,6 @@ and @ref attachTextureLayer() use DSA to avoid unnecessary calls to
information.
@requires_gl30 Extension @extension{ARB,framebuffer_object}
@todo `MAX_COLOR_ATTACHMENTS`
*/
class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObject {
friend Implementation::FramebufferState;
@ -114,6 +113,10 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
* @see @ref mapForDraw(), @ref attachRenderbuffer(),
* @ref attachTexture(), @ref attachCubeMapTexture(),
* @ref attachTextureLayer()
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} or
* @es_extension{NV,draw_buffers} for @ref mapForDraw() and
* extension @es_extension{NV,fbo_color_attachments} for `attach*()`
* in OpenGL ES 2.0.
*/
class ColorAttachment {
friend Framebuffer;
@ -122,9 +125,6 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
/**
* @brief Constructor
* @param id Color attachment ID
*
* @requires_gles30 Extension @es_extension{NV,fbo_color_attachments}
* is required for @p id greater than 0 in OpenGL ES 2.0
*/
constexpr explicit ColorAttachment(UnsignedInt id): attachment(GL_COLOR_ATTACHMENT0 + id) {}
@ -140,6 +140,8 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
* @brief Draw attachment
*
* @see @ref mapForDraw()
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} or
* @es_extension{NV,draw_buffers} in OpenGL ES 2.0.
*/
class DrawAttachment {
public:
@ -164,6 +166,8 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
*
* @see @ref attachRenderbuffer(), @ref attachTexture(),
* @ref attachCubeMapTexture(), @ref attachTextureLayer()
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} or
* @es_extension{NV,fbo_color_attachments} in OpenGL ES 2.0.
*/
class MAGNUM_EXPORT BufferAttachment {
public:
@ -293,8 +297,9 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
* @brief Max supported color attachment count
*
* The result is cached, repeated queries don't result in repeated
* OpenGL calls. If neither OpenGL ES 3.0 nor ES extension
* @extension{NV,fbo_color_attachments} is available, returns `0`.
* OpenGL calls. In OpenGL ES 2.0, if neither @es_extension{EXT,draw_buffers}
* nor @es_extension{NV,fbo_color_attachments} extension is available,
* returns `0`.
* @see @ref mapForDraw(), @fn_gl{Get} with @def_gl{MAX_COLOR_ATTACHMENTS}
*/
static Int maxColorAttachments();
@ -404,8 +409,8 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
* @fn_gl2{NamedFramebufferDrawBuffers,DrawBuffers},
* @fn_gl_extension{FramebufferDrawBuffers,EXT,direct_state_access},
* eventually @fn_gl{BindFramebuffer} and @fn_gl{DrawBuffers}
* @requires_gles30 Extension @es_extension2{NV,draw_buffers,GL_NV_draw_buffers}
* in OpenGL ES 2.0
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} or
* @es_extension{NV,draw_buffers} in OpenGL ES 2.0.
*/
Framebuffer& mapForDraw(std::initializer_list<std::pair<UnsignedInt, DrawAttachment>> attachments);
@ -425,6 +430,8 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
* @fn_gl_extension{FramebufferDrawBuffer,EXT,direct_state_access},
* eventually @fn_gl{BindFramebuffer} and @fn_gl{DrawBuffer} (or
* @fn_gl{DrawBuffers} in OpenGL ES)
* @requires_gles30 Extension @es_extension{EXT,draw_buffers} or
* @es_extension{NV,draw_buffers} in OpenGL ES 2.0.
*/
Framebuffer& mapForDraw(DrawAttachment attachment);

15
src/Magnum/Implementation/FramebufferState.cpp

@ -90,8 +90,12 @@ FramebufferState::FramebufferState(Context& context, std::vector<std::string>& e
#endif
{
checkStatusImplementation = &AbstractFramebuffer::checkStatusImplementationDefault;
#ifndef MAGNUM_TARGET_GLES2
drawBuffersImplementation = &AbstractFramebuffer::drawBuffersImplementationDefault;
#endif
#ifndef MAGNUM_TARGET_GLES
drawBufferImplementation = &AbstractFramebuffer::drawBufferImplementationDefault;
#endif
readBufferImplementation = &AbstractFramebuffer::readBufferImplementationDefault;
renderbufferImplementation = &Framebuffer::renderbufferImplementationDefault;
@ -134,6 +138,17 @@ FramebufferState::FramebufferState(Context& context, std::vector<std::string>& e
bindInternalImplementation = &Framebuffer::bindImplementationSingle;
checkStatusImplementation = &Framebuffer::checkStatusImplementationSingle;
}
/* Framebuffer draw mapping on ES2 */
if(context.isExtensionSupported<Extensions::GL::EXT::draw_buffers>()) {
extensions.push_back(Extensions::GL::EXT::draw_buffers::string());
drawBuffersImplementation = &AbstractFramebuffer::drawBuffersImplementationEXT;
} else if(context.isExtensionSupported<Extensions::GL::NV::draw_buffers>()) {
extensions.push_back(Extensions::GL::NV::draw_buffers::string());
drawBuffersImplementation = &AbstractFramebuffer::drawBuffersImplementationNV;
} else drawBuffersImplementation = nullptr;
#endif
/* Framebuffer reading implementation */

2
src/Magnum/Implementation/FramebufferState.h

@ -42,7 +42,9 @@ struct FramebufferState {
void(*blitImplementation)(AbstractFramebuffer&, AbstractFramebuffer&, const Range2Di&, const Range2Di&, FramebufferBlitMask, FramebufferBlitFilter);
GLenum(AbstractFramebuffer::*checkStatusImplementation)(FramebufferTarget);
void(AbstractFramebuffer::*drawBuffersImplementation)(GLsizei, const GLenum*);
#ifndef MAGNUM_TARGET_GLES
void(AbstractFramebuffer::*drawBufferImplementation)(GLenum);
#endif
void(AbstractFramebuffer::*readBufferImplementation)(GLenum);
void(AbstractFramebuffer::*invalidateImplementation)(GLsizei, const GLenum*);
#ifndef MAGNUM_TARGET_GLES2

5
src/Magnum/Test/FramebufferGLTest.cpp

@ -613,8 +613,9 @@ void FramebufferGLTest::multipleColorOutputs() {
if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::framebuffer_object>())
CORRADE_SKIP(Extensions::GL::ARB::framebuffer_object::string() + std::string(" is not available."));
#elif defined(MAGNUM_TARGET_GLES2)
if(!Context::current()->isExtensionSupported<Extensions::GL::NV::draw_buffers>())
CORRADE_SKIP(Extensions::GL::NV::draw_buffers::string() + std::string(" is not available."));
if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::draw_buffers>() &&
!Context::current()->isExtensionSupported<Extensions::GL::NV::draw_buffers>())
CORRADE_SKIP("No required extension available.");
#endif
Texture2D color1;

1
src/MagnumExternal/OpenGL/GLES2/extensions.txt vendored

@ -18,6 +18,7 @@ extension EXT_shadow_samplers optional
extension EXT_texture_rg optional
extension EXT_texture_storage optional
extension EXT_map_buffer_range optional
extension EXT_draw_buffers optional
extension EXT_instanced_arrays optional
extension EXT_draw_instanced optional
extension NV_draw_buffers optional

3
src/MagnumExternal/OpenGL/GLES2/flextGL.cpp vendored

@ -46,6 +46,9 @@ FLEXTGL_EXPORT void(APIENTRY *flextglTextureStorage3DEXT)(GLuint, GLenum, GLsize
FLEXTGL_EXPORT void *(APIENTRY *flextglMapBufferRangeEXT)(GLenum, GLintptr, GLsizeiptr, GLbitfield) = nullptr;
FLEXTGL_EXPORT void(APIENTRY *flextglFlushMappedBufferRangeEXT)(GLenum, GLintptr, GLsizeiptr) = nullptr;
/* GL_EXT_draw_buffers */
FLEXTGL_EXPORT void(APIENTRY *flextglDrawBuffersEXT)(GLsizei, const GLenum *) = nullptr;
/* GL_EXT_instanced_arrays */
FLEXTGL_EXPORT void(APIENTRY *flextglDrawArraysInstancedEXT)(GLenum, GLint, GLsizei, GLsizei) = nullptr;
FLEXTGL_EXPORT void(APIENTRY *flextglDrawElementsInstancedEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei) = nullptr;

42
src/MagnumExternal/OpenGL/GLES2/flextGL.h vendored

@ -503,6 +503,43 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020
/* GL_EXT_draw_buffers */
#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
#define GL_MAX_DRAW_BUFFERS_EXT 0x8824
#define GL_DRAW_BUFFER0_EXT 0x8825
#define GL_DRAW_BUFFER1_EXT 0x8826
#define GL_DRAW_BUFFER2_EXT 0x8827
#define GL_DRAW_BUFFER3_EXT 0x8828
#define GL_DRAW_BUFFER4_EXT 0x8829
#define GL_DRAW_BUFFER5_EXT 0x882A
#define GL_DRAW_BUFFER6_EXT 0x882B
#define GL_DRAW_BUFFER7_EXT 0x882C
#define GL_DRAW_BUFFER8_EXT 0x882D
#define GL_DRAW_BUFFER9_EXT 0x882E
#define GL_DRAW_BUFFER10_EXT 0x882F
#define GL_DRAW_BUFFER11_EXT 0x8830
#define GL_DRAW_BUFFER12_EXT 0x8831
#define GL_DRAW_BUFFER13_EXT 0x8832
#define GL_DRAW_BUFFER14_EXT 0x8833
#define GL_DRAW_BUFFER15_EXT 0x8834
#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
/* GL_EXT_instanced_arrays */
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE
@ -1101,6 +1138,11 @@ GLAPI FLEXTGL_EXPORT void *(APIENTRY *flextglMapBufferRangeEXT)(GLenum, GLintptr
GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglFlushMappedBufferRangeEXT)(GLenum, GLintptr, GLsizeiptr);
#define glFlushMappedBufferRangeEXT flextglFlushMappedBufferRangeEXT
/* GL_EXT_draw_buffers */
GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglDrawBuffersEXT)(GLsizei, const GLenum *);
#define glDrawBuffersEXT flextglDrawBuffersEXT
/* GL_EXT_instanced_arrays */
GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglDrawArraysInstancedEXT)(GLenum, GLint, GLsizei, GLsizei);

41
src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h vendored

@ -477,6 +477,43 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020
/* GL_EXT_draw_buffers */
#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
#define GL_MAX_DRAW_BUFFERS_EXT 0x8824
#define GL_DRAW_BUFFER0_EXT 0x8825
#define GL_DRAW_BUFFER1_EXT 0x8826
#define GL_DRAW_BUFFER2_EXT 0x8827
#define GL_DRAW_BUFFER3_EXT 0x8828
#define GL_DRAW_BUFFER4_EXT 0x8829
#define GL_DRAW_BUFFER5_EXT 0x882A
#define GL_DRAW_BUFFER6_EXT 0x882B
#define GL_DRAW_BUFFER7_EXT 0x882C
#define GL_DRAW_BUFFER8_EXT 0x882D
#define GL_DRAW_BUFFER9_EXT 0x882E
#define GL_DRAW_BUFFER10_EXT 0x882F
#define GL_DRAW_BUFFER11_EXT 0x8830
#define GL_DRAW_BUFFER12_EXT 0x8831
#define GL_DRAW_BUFFER13_EXT 0x8832
#define GL_DRAW_BUFFER14_EXT 0x8833
#define GL_DRAW_BUFFER15_EXT 0x8834
#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
/* GL_EXT_instanced_arrays */
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE
@ -1051,6 +1088,10 @@ GLAPI void glTextureStorage3DEXT(GLuint, GLenum, GLsizei, GLenum, GLsizei, GLsiz
GLAPI void * glMapBufferRangeEXT(GLenum, GLintptr, GLsizeiptr, GLbitfield);
GLAPI void glFlushMappedBufferRangeEXT(GLenum, GLintptr, GLsizeiptr);
/* GL_EXT_draw_buffers */
GLAPI void glDrawBuffersEXT(GLsizei, const GLenum *);
/* GL_EXT_instanced_arrays */
GLAPI void glDrawArraysInstancedEXT(GLenum, GLint, GLsizei, GLsizei);

44
src/MagnumExternal/OpenGL/GLES2/flextGLNaCl.h vendored

@ -478,6 +478,43 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020
/* GL_EXT_draw_buffers */
#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
#define GL_MAX_DRAW_BUFFERS_EXT 0x8824
#define GL_DRAW_BUFFER0_EXT 0x8825
#define GL_DRAW_BUFFER1_EXT 0x8826
#define GL_DRAW_BUFFER2_EXT 0x8827
#define GL_DRAW_BUFFER3_EXT 0x8828
#define GL_DRAW_BUFFER4_EXT 0x8829
#define GL_DRAW_BUFFER5_EXT 0x882A
#define GL_DRAW_BUFFER6_EXT 0x882B
#define GL_DRAW_BUFFER7_EXT 0x882C
#define GL_DRAW_BUFFER8_EXT 0x882D
#define GL_DRAW_BUFFER9_EXT 0x882E
#define GL_DRAW_BUFFER10_EXT 0x882F
#define GL_DRAW_BUFFER11_EXT 0x8830
#define GL_DRAW_BUFFER12_EXT 0x8831
#define GL_DRAW_BUFFER13_EXT 0x8832
#define GL_DRAW_BUFFER14_EXT 0x8833
#define GL_DRAW_BUFFER15_EXT 0x8834
#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
/* GL_EXT_instanced_arrays */
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE
@ -1252,6 +1289,13 @@ GL_APICALL void GL_APIENTRY GLES2FlushMappedBufferRangeEXT(GLenum, GLintptr, GLs
#define glFlushMappedBufferRangeEXT GLES2FlushMappedBufferRangeEXT
#endif
/* GL_EXT_draw_buffers */
#ifndef GL_EXT_draw_buffers
#define GL_EXT_draw_buffers 1
GL_APICALL void GL_APIENTRY GLES2DrawBuffersEXT(GLsizei, const GLenum *);
#define glDrawBuffersEXT GLES2DrawBuffersEXT
#endif
/* GL_EXT_instanced_arrays */
#ifndef GL_EXT_instanced_arrays
#define GL_EXT_instanced_arrays 1

3
src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp vendored

@ -64,6 +64,9 @@ void flextGLInit() {
flextglMapBufferRangeEXT = reinterpret_cast<void *(APIENTRY*)(GLenum, GLintptr, GLsizeiptr, GLbitfield)>(loader.load("glMapBufferRangeEXT"));
flextglFlushMappedBufferRangeEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLintptr, GLsizeiptr)>(loader.load("glFlushMappedBufferRangeEXT"));
/* GL_EXT_draw_buffers */
flextglDrawBuffersEXT = reinterpret_cast<void(APIENTRY*)(GLsizei, const GLenum *)>(loader.load("glDrawBuffersEXT"));
/* GL_EXT_instanced_arrays */
flextglDrawArraysInstancedEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLint, GLsizei, GLsizei)>(loader.load("glDrawArraysInstancedEXT"));
flextglDrawElementsInstancedEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei)>(loader.load("glDrawElementsInstancedEXT"));

Loading…
Cancel
Save