diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index d8b11b63a..0b4fdd65e 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -355,6 +355,7 @@ Extension | Status @es_extension{EXT,robustness} | done @es_extension{EXT,disjoint_timer_query} | only time elapsed query @es_extension{EXT,texture_sRGB_decode} | done +@es_extension{EXT,sRGB_write_control} | done @es_extension{EXT,shader_integer_mix} | done (shading language only) @extension3{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | | @extension{KHR,texture_compression_astc_hdr} | | diff --git a/src/Magnum/Context.cpp b/src/Magnum/Context.cpp index 6247d5be2..c4214d05c 100644 --- a/src/Magnum/Context.cpp +++ b/src/Magnum/Context.cpp @@ -252,6 +252,7 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,EXT,debug_marker), _extension(GL,EXT,disjoint_timer_query), _extension(GL,EXT,texture_sRGB_decode), + _extension(GL,EXT,sRGB_write_control), _extension(GL,EXT,separate_shader_objects), _extension(GL,EXT,multisampled_render_to_texture), _extension(GL,EXT,robustness), diff --git a/src/Magnum/Extensions.h b/src/Magnum/Extensions.h index 147fcbc4e..037839f9b 100644 --- a/src/Magnum/Extensions.h +++ b/src/Magnum/Extensions.h @@ -323,6 +323,7 @@ namespace GL { _extension(GL,EXT,draw_buffers, GLES200, GLES300) // #151 #endif _extension(GL,EXT,texture_sRGB_decode, GLES200, None) // #152 + _extension(GL,EXT,sRGB_write_control, GLES200, None) // #153 #ifdef MAGNUM_TARGET_GLES2 _extension(GL,EXT,instanced_arrays, GLES200, GLES300) // #156 _extension(GL,EXT,draw_instanced, GLES200, GLES300) // #157 diff --git a/src/Magnum/Renderer.h b/src/Magnum/Renderer.h index c7e351c3b..5b2e3b1cb 100644 --- a/src/Magnum/Renderer.h +++ b/src/Magnum/Renderer.h @@ -140,15 +140,24 @@ class MAGNUM_EXPORT Renderer { */ FaceCulling = GL_CULL_FACE, - #ifndef MAGNUM_TARGET_GLES + #ifndef MAGNUM_TARGET_WEBGL /** * sRGB encoding of the default framebuffer * @requires_gl30 Extension @extension{ARB,framebuffer_sRGB} - * @requires_gl sRGB encoding of the default framebuffer is - * implementation-defined in OpenGL ES and WebGL. + * @requires_es_extension @es_extension{EXT,sRGB_write_control}. + * Otherwise sRGB encoding of the default framebuffer is + * implementation-defined. + * @requires_gles sRGB encoding of the default framebuffer is + * implementation-defined in WebGL. */ + #ifndef MAGNUM_TARGET_GLES FramebufferSRGB = GL_FRAMEBUFFER_SRGB, + #else + FramebufferSRGB = GL_FRAMEBUFFER_SRGB_EXT, + #endif + #endif + #ifndef MAGNUM_TARGET_GLES /** * Logical operation * @see @ref setLogicOperation() @@ -156,9 +165,7 @@ class MAGNUM_EXPORT Renderer { * available in OpenGL ES and WebGL. */ LogicOperation = GL_COLOR_LOGIC_OP, - #endif - #ifndef MAGNUM_TARGET_GLES /** * Multisampling. Enabled by default. Note that the actual presence * of this feature in default framebuffer depends on context diff --git a/src/MagnumExternal/OpenGL/GLES2/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/extensions.txt index cd2c669c0..82193082c 100644 --- a/src/MagnumExternal/OpenGL/GLES2/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/extensions.txt @@ -56,6 +56,7 @@ extension EXT_debug_label optional extension EXT_debug_marker optional extension EXT_disjoint_timer_query optional extension EXT_texture_sRGB_decode optional +extension EXT_sRGB_write_control optional extension EXT_separate_shader_objects optional extension EXT_multisampled_render_to_texture optional extension EXT_robustness optional diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGL.h b/src/MagnumExternal/OpenGL/GLES2/flextGL.h index 45a205dad..cb0accec1 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGL.h @@ -759,6 +759,10 @@ typedef khronos_ssize_t GLsizeiptr; #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A +/* GL_EXT_sRGB_write_control */ + +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 + /* GL_EXT_separate_shader_objects */ #define GL_ACTIVE_PROGRAM_EXT 0x8259 @@ -1313,6 +1317,9 @@ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglGetQueryObjectui64vEXT)(GLuint, GLenu /* GL_EXT_texture_sRGB_decode */ +/* GL_EXT_sRGB_write_control */ + + /* GL_EXT_separate_shader_objects */ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglUseShaderProgramEXT)(GLenum, GLuint); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp index 65dd22e3e..d82919f1c 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp @@ -170,6 +170,8 @@ void flextGLInit() { /* GL_EXT_texture_sRGB_decode */ + /* GL_EXT_sRGB_write_control */ + /* GL_EXT_separate_shader_objects */ flextglUseShaderProgramEXT = reinterpret_cast(loader.load("glUseShaderProgramEXT")); flextglActiveProgramEXT = reinterpret_cast(loader.load("glActiveProgramEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/extensions.txt index be21c509a..41247b237 100644 --- a/src/MagnumExternal/OpenGL/GLES3/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/extensions.txt @@ -11,6 +11,7 @@ extension EXT_debug_label optional extension EXT_debug_marker optional extension EXT_disjoint_timer_query optional extension EXT_texture_sRGB_decode optional +extension EXT_sRGB_write_control optional extension EXT_separate_shader_objects optional extension EXT_multisampled_render_to_texture optional extension EXT_robustness optional diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGL.h b/src/MagnumExternal/OpenGL/GLES3/flextGL.h index 437812e84..2c9653f97 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGL.h @@ -943,6 +943,10 @@ typedef khronos_ssize_t GLsizeiptr; #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A +/* GL_EXT_sRGB_write_control */ + +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 + /* GL_EXT_separate_shader_objects */ #define GL_ACTIVE_PROGRAM_EXT 0x8259 @@ -1535,6 +1539,9 @@ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglGetQueryObjectui64vEXT)(GLuint, GLenu /* GL_EXT_texture_sRGB_decode */ +/* GL_EXT_sRGB_write_control */ + + /* GL_EXT_separate_shader_objects */ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglUseShaderProgramEXT)(GLenum, GLuint); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp index 6e618bb1f..ffb11853f 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp @@ -114,6 +114,8 @@ void flextGLInit() { /* GL_EXT_texture_sRGB_decode */ + /* GL_EXT_sRGB_write_control */ + /* GL_EXT_separate_shader_objects */ flextglUseShaderProgramEXT = reinterpret_cast(loader.load("glUseShaderProgramEXT")); flextglActiveProgramEXT = reinterpret_cast(loader.load("glActiveProgramEXT"));