Browse Source

GL: implement EXT_texture_norm16 ES and WebGL extension.

pull/461/head
Vladimír Vondruš 6 years ago
parent
commit
083ecf72b8
  1. 7
      doc/changelog.dox
  2. 2
      doc/opengl-support.dox
  3. 28
      src/Magnum/GL/AbstractTexture.cpp
  4. 2
      src/Magnum/GL/Context.cpp
  5. 2
      src/Magnum/GL/Context.h
  6. 146
      src/Magnum/GL/Extensions.h
  7. 8
      src/Magnum/GL/Implementation/pixelFormatMapping.hpp
  8. 6
      src/Magnum/GL/PixelFormat.cpp
  9. 22
      src/Magnum/GL/PixelFormat.h
  10. 44
      src/Magnum/GL/RenderbufferFormat.h
  11. 2
      src/Magnum/GL/TextureFormat.cpp
  12. 83
      src/Magnum/GL/TextureFormat.h
  13. 1
      src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt
  14. 11
      src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h
  15. 1
      src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt
  16. 1
      src/MagnumExternal/OpenGL/GLES3/extensions.txt
  17. 11
      src/MagnumExternal/OpenGL/GLES3/flextGL.h
  18. 11
      src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h
  19. 11
      src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h

7
doc/changelog.dox

@ -40,6 +40,13 @@ See also:
@subsection changelog-latest-new New features @subsection changelog-latest-new New features
@subsubsection changelog-latest-new-gl GL library
- Implemented @gl_extension{EXT,texture_norm16} and
@webgl_extension{EXT,texture_norm16} ES and WebGL extensions, making
normalized 16-bit texture and renderbuffer formats available on all
platforms
@subsubsection changelog-latest-new-math Math library @subsubsection changelog-latest-new-math Math library
- Added @ref Math::fmod() (see [mosra/magnum#454](https://github.com/mosra/magnum/pull/454)) - Added @ref Math::fmod() (see [mosra/magnum#454](https://github.com/mosra/magnum/pull/454))

2
doc/opengl-support.dox

@ -470,6 +470,7 @@ Extension | Status
@gl_extension{EXT,texture_compression_s3tc} | done @gl_extension{EXT,texture_compression_s3tc} | done
@gl_extension{EXT,pvrtc_sRGB} | done @gl_extension{EXT,pvrtc_sRGB} | done
@gl_extension{EXT,shader_integer_mix} | done (shading language only) @gl_extension{EXT,shader_integer_mix} | done (shading language only)
@gl_extension{EXT,texture_norm16} | done
@gl_extension{EXT,texture_sRGB_R8} | done @gl_extension{EXT,texture_sRGB_R8} | done
@gl_extension{EXT,texture_sRGB_RG8} | done @gl_extension{EXT,texture_sRGB_RG8} | done
@gl_extension{EXT,polygon_offset_clamp} | | @gl_extension{EXT,polygon_offset_clamp} | |
@ -552,6 +553,7 @@ Extension | Status
@webgl_extension{EXT,texture_compression_rgtc} | done @webgl_extension{EXT,texture_compression_rgtc} | done
@webgl_extension{EXT,texture_compression_bptc} | done @webgl_extension{EXT,texture_compression_bptc} | done
@webgl_extension{EXT,clip_cull_distance} | done @webgl_extension{EXT,clip_cull_distance} | done
@webgl_extension{EXT,texture_norm16} | done
@webgl_extension{EXT,draw_buffers_indexed} | done @webgl_extension{EXT,draw_buffers_indexed} | done
@webgl_extension{OES,texture_float_linear} | done @webgl_extension{OES,texture_float_linear} | done
@webgl_extension{OVR,multiview2} | | @webgl_extension{OVR,multiview2} | |

28
src/Magnum/GL/AbstractTexture.cpp

@ -564,7 +564,7 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
case TextureFormat::SR8: case TextureFormat::SR8:
#endif #endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES2
case TextureFormat::R16: case TextureFormat::R16:
case TextureFormat::R16Snorm: case TextureFormat::R16Snorm:
#endif #endif
@ -614,7 +614,7 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#ifdef MAGNUM_TARGET_GLES #ifdef MAGNUM_TARGET_GLES
case TextureFormat::SRG8: case TextureFormat::SRG8:
#endif #endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES2
case TextureFormat::RG16: case TextureFormat::RG16:
case TextureFormat::RG16Snorm: case TextureFormat::RG16Snorm:
#endif #endif
@ -662,7 +662,8 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
case TextureFormat::RGB8Snorm: case TextureFormat::RGB8Snorm:
#endif #endif
#ifndef MAGNUM_TARGET_GLES /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
case TextureFormat::RGB16: case TextureFormat::RGB16:
case TextureFormat::RGB16Snorm: case TextureFormat::RGB16Snorm:
#endif #endif
@ -740,7 +741,8 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
case TextureFormat::RGBA8Snorm: case TextureFormat::RGBA8Snorm:
#endif #endif
#ifndef MAGNUM_TARGET_GLES /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
case TextureFormat::RGBA16: case TextureFormat::RGBA16:
case TextureFormat::RGBA16Snorm: case TextureFormat::RGBA16Snorm:
#endif #endif
@ -851,8 +853,16 @@ PixelFormat pixelFormatForInternalFormat(const TextureFormat internalFormat) {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
case TextureFormat::Luminance: case TextureFormat::Luminance:
#ifdef MAGNUM_TARGET_WEBGL
case TextureFormat::R16:
case TextureFormat::R16Snorm:
#endif
return PixelFormat::Luminance; return PixelFormat::Luminance;
case TextureFormat::LuminanceAlpha: case TextureFormat::LuminanceAlpha:
#ifdef MAGNUM_TARGET_WEBGL
case TextureFormat::RG16:
case TextureFormat::RG16Snorm:
#endif
return PixelFormat::LuminanceAlpha; return PixelFormat::LuminanceAlpha;
#endif #endif
@ -1046,7 +1056,8 @@ PixelType pixelTypeForInternalFormat(const TextureFormat internalFormat) {
#endif #endif
#endif #endif
#ifndef MAGNUM_TARGET_GLES /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
case TextureFormat::R16: case TextureFormat::R16:
case TextureFormat::RG16: case TextureFormat::RG16:
case TextureFormat::RGB16: case TextureFormat::RGB16:
@ -1067,17 +1078,18 @@ PixelType pixelTypeForInternalFormat(const TextureFormat internalFormat) {
#endif #endif
return PixelType::UnsignedShort; return PixelType::UnsignedShort;
#ifndef MAGNUM_TARGET_GLES2 /* Available everywhere except ES2 (WebGL 1 has it) */
#ifndef MAGNUM_TARGET_GLES #if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
case TextureFormat::R16Snorm: case TextureFormat::R16Snorm:
case TextureFormat::RG16Snorm: case TextureFormat::RG16Snorm:
case TextureFormat::RGB16Snorm: case TextureFormat::RGB16Snorm:
case TextureFormat::RGBA16Snorm: case TextureFormat::RGBA16Snorm:
#endif #ifndef MAGNUM_TARGET_GLES2
case TextureFormat::R16I: case TextureFormat::R16I:
case TextureFormat::RG16I: case TextureFormat::RG16I:
case TextureFormat::RGB16I: case TextureFormat::RGB16I:
case TextureFormat::RGBA16I: case TextureFormat::RGBA16I:
#endif
return PixelType::Short; return PixelType::Short;
#endif #endif

2
src/Magnum/GL/Context.cpp

@ -275,6 +275,7 @@ constexpr Extension ExtensionList[]{
_extension(EXT,texture_compression_bptc), _extension(EXT,texture_compression_bptc),
_extension(EXT,texture_compression_rgtc), _extension(EXT,texture_compression_rgtc),
_extension(EXT,texture_filter_anisotropic), _extension(EXT,texture_filter_anisotropic),
_extension(EXT,texture_norm16),
_extension(OES,texture_float_linear), _extension(OES,texture_float_linear),
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(OVR,multiview2), _extension(OVR,multiview2),
@ -349,6 +350,7 @@ constexpr Extension ExtensionList[]{
_extension(EXT,texture_filter_anisotropic), _extension(EXT,texture_filter_anisotropic),
_extension(EXT,texture_format_BGRA8888), _extension(EXT,texture_format_BGRA8888),
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_norm16),
_extension(EXT,texture_sRGB_R8), _extension(EXT,texture_sRGB_R8),
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2

2
src/Magnum/GL/Context.h

@ -58,7 +58,7 @@ namespace Implementation {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
192 192
#elif !defined(MAGNUM_TARGET_WEBGL) #elif !defined(MAGNUM_TARGET_WEBGL)
144 160
#else #else
48 48
#endif #endif

146
src/Magnum/GL/Extensions.h

@ -299,7 +299,10 @@ namespace ANGLE {
_extension(11,EXT,texture_compression_bptc, GLES200, None) // #39 _extension(11,EXT,texture_compression_bptc, GLES200, None) // #39
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(12,EXT,clip_cull_distance, GLES300, None) // #43 _extension(12,EXT,clip_cull_distance, GLES300, None) // #43
_extension(13,EXT,draw_buffers_indexed, GLES300, None) // #45 #endif
_extension(13,EXT,texture_norm16, GLES200, None) // #44
#ifndef MAGNUM_TARGET_GLES2
_extension(14,EXT,draw_buffers_indexed, GLES300, None) // #45
#endif #endif
} namespace OES { } namespace OES {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
@ -436,108 +439,109 @@ namespace ANDROID {
_extension( 59,EXT,texture_buffer, GLES310, GLES320) // #183 _extension( 59,EXT,texture_buffer, GLES310, GLES320) // #183
_extension( 60,EXT,texture_cube_map_array, GLES310, GLES320) // #184 _extension( 60,EXT,texture_cube_map_array, GLES310, GLES320) // #184
_extension( 61,EXT,primitive_bounding_box, GLES310, GLES320) // #186 _extension( 61,EXT,primitive_bounding_box, GLES310, GLES320) // #186
_extension( 62,EXT,texture_sRGB_R8, GLES300, None) // #221 _extension( 62,EXT,texture_norm16, GLES310, None) // #207
_extension( 63,EXT,texture_sRGB_RG8, GLES300, None) // #223 _extension( 63,EXT,texture_sRGB_R8, GLES300, None) // #221
_extension( 64,EXT,texture_sRGB_RG8, GLES300, None) // #223
#endif #endif
_extension( 64,EXT,polygon_offset_clamp, GLES200, None) // #252 _extension( 65,EXT,polygon_offset_clamp, GLES200, None) // #252
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension( 65,EXT,clip_cull_distance, GLES300, None) // #257 _extension( 66,EXT,clip_cull_distance, GLES300, None) // #257
_extension( 66,EXT,texture_compression_rgtc, GLES300, None) // #286 _extension( 67,EXT,texture_compression_rgtc, GLES300, None) // #286
_extension( 67,EXT,texture_compression_bptc, GLES300, None) // #287 _extension( 68,EXT,texture_compression_bptc, GLES300, None) // #287
#endif #endif
_extension( 68,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 _extension( 69,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289
} namespace IMG { } namespace IMG {
_extension( 69,IMG,texture_compression_pvrtc, GLES200, None) // #54 _extension( 70,IMG,texture_compression_pvrtc, GLES200, None) // #54
} namespace KHR { } namespace KHR {
_extension( 70,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117 _extension( 80,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117
_extension( 71,KHR,texture_compression_astc_hdr,GLES200, None) // #117 _extension( 81,KHR,texture_compression_astc_hdr,GLES200, None) // #117
_extension( 72,KHR,debug, GLES200, GLES320) // #118 _extension( 82,KHR,debug, GLES200, GLES320) // #118
_extension( 73,KHR,blend_equation_advanced, GLES200, GLES320) // #168 _extension( 83,KHR,blend_equation_advanced, GLES200, GLES320) // #168
_extension( 74,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 _extension( 84,KHR,blend_equation_advanced_coherent, GLES200, None) // #168
_extension( 75,KHR,robustness, GLES200, GLES320) // #170 _extension( 85,KHR,robustness, GLES200, GLES320) // #170
_extension( 76,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 _extension( 86,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189
_extension( 77,KHR,context_flush_control, GLES200, None) // #191 _extension( 87,KHR,context_flush_control, GLES200, None) // #191
_extension( 78,KHR,no_error, GLES200, None) // #243 _extension( 88,KHR,no_error, GLES200, None) // #243
_extension( 79,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249 _extension( 89,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249
} namespace NV { } namespace NV {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension( 80,NV,draw_buffers, GLES200, GLES300) // #91 _extension(100,NV,draw_buffers, GLES200, GLES300) // #91
_extension( 81,NV,fbo_color_attachments, GLES200, GLES300) // #92 _extension(101,NV,fbo_color_attachments, GLES200, GLES300) // #92
_extension( 82,NV,read_buffer, GLES200, GLES300) // #93 _extension(102,NV,read_buffer, GLES200, GLES300) // #93
#endif #endif
_extension( 83,NV,read_buffer_front, GLES200, None) // #93 _extension(103,NV,read_buffer_front, GLES200, None) // #93
_extension( 84,NV,read_depth, GLES200, None) // #94 _extension(104,NV,read_depth, GLES200, None) // #94
_extension( 85,NV,read_stencil, GLES200, None) // #94 _extension(105,NV,read_stencil, GLES200, None) // #94
_extension( 86,NV,read_depth_stencil, GLES200, None) // #94 _extension(106,NV,read_depth_stencil, GLES200, None) // #94
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension( 87,NV,pack_subimage, GLES200, GLES300) // #132 _extension(107,NV,pack_subimage, GLES200, GLES300) // #132
_extension( 88,NV,draw_instanced, GLES200, GLES300) // #141 _extension(108,NV,draw_instanced, GLES200, GLES300) // #141
_extension( 89,NV,framebuffer_blit, GLES200, GLES300) // #142 _extension(109,NV,framebuffer_blit, GLES200, GLES300) // #142
_extension( 90,NV,framebuffer_multisample, GLES200, GLES300) // #143 _extension(110,NV,framebuffer_multisample, GLES200, GLES300) // #143
_extension( 91,NV,instanced_arrays, GLES200, GLES300) // #145 _extension(111,NV,instanced_arrays, GLES200, GLES300) // #145
_extension( 92,NV,shadow_samplers_array, GLES200, GLES300) // #146 _extension(112,NV,shadow_samplers_array, GLES200, GLES300) // #146
_extension( 93,NV,shadow_samplers_cube, GLES200, GLES300) // #147 _extension(113,NV,shadow_samplers_cube, GLES200, GLES300) // #147
#endif #endif
_extension( 94,NV,texture_border_clamp, GLES200, None) // #149 _extension(114,NV,texture_border_clamp, GLES200, None) // #149
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension( 95,NV,shader_noperspective_interpolation, GLES300, None) // #201 _extension(115,NV,shader_noperspective_interpolation, GLES300, None) // #201
#endif #endif
_extension( 96,NV,sample_locations, GLES200, None) // #235 _extension(116,NV,sample_locations, GLES200, None) // #235
_extension( 97,NV,polygon_mode, GLES200, None) // #238 _extension(117,NV,polygon_mode, GLES200, None) // #238
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension( 98,NV,fragment_shader_barycentric, GLES320, None) // #316 _extension(118,NV,fragment_shader_barycentric, GLES320, None) // #316
#endif #endif
} namespace OES { } namespace OES {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(100,OES,depth24, GLES200, GLES300) // #24 _extension(120,OES,depth24, GLES200, GLES300) // #24
#endif #endif
_extension(101,OES,depth32, GLES200, None) // #25 _extension(121,OES,depth32, GLES200, None) // #25
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(102,OES,element_index_uint, GLES200, GLES300) // #26 _extension(122,OES,element_index_uint, GLES200, GLES300) // #26
_extension(103,OES,fbo_render_mipmap, GLES200, GLES300) // #27 _extension(123,OES,fbo_render_mipmap, GLES200, GLES300) // #27
#endif #endif
_extension(104,OES,mapbuffer, GLES200, None) // #29 _extension(124,OES,mapbuffer, GLES200, None) // #29
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(105,OES,rgb8_rgba8, GLES200, GLES300) // #30 _extension(125,OES,rgb8_rgba8, GLES200, GLES300) // #30
#endif #endif
_extension(106,OES,stencil1, GLES200, None) // #31 _extension(126,OES,stencil1, GLES200, None) // #31
_extension(107,OES,stencil4, GLES200, None) // #32 _extension(127,OES,stencil4, GLES200, None) // #32
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(108,OES,texture_3D, GLES200, GLES300) // #34 _extension(128,OES,texture_3D, GLES200, GLES300) // #34
_extension(109,OES,texture_half_float_linear, GLES200, GLES300) // #35 _extension(129,OES,texture_half_float_linear, GLES200, GLES300) // #35
#endif #endif
_extension(110,OES,texture_float_linear, GLES200, None) // #35 _extension(130,OES,texture_float_linear, GLES200, None) // #35
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(111,OES,texture_half_float, GLES200, GLES300) // #36 _extension(131,OES,texture_half_float, GLES200, GLES300) // #36
_extension(112,OES,texture_float, GLES200, GLES300) // #36 _extension(132,OES,texture_float, GLES200, GLES300) // #36
_extension(113,OES,texture_npot, GLES200, GLES300) // #37 _extension(133,OES,texture_npot, GLES200, GLES300) // #37
_extension(114,OES,vertex_half_float, GLES200, GLES300) // #38 _extension(134,OES,vertex_half_float, GLES200, GLES300) // #38
_extension(115,OES,packed_depth_stencil, GLES200, GLES300) // #43 _extension(135,OES,packed_depth_stencil, GLES200, GLES300) // #43
_extension(116,OES,depth_texture, GLES200, GLES300) // #44 _extension(136,OES,depth_texture, GLES200, GLES300) // #44
_extension(117,OES,standard_derivatives, GLES200, GLES300) // #45 _extension(137,OES,standard_derivatives, GLES200, GLES300) // #45
_extension(118,OES,vertex_array_object, GLES200, GLES300) // #71 _extension(138,OES,vertex_array_object, GLES200, GLES300) // #71
_extension(119,OES,required_internalformat, GLES200, GLES300) // #115 _extension(139,OES,required_internalformat, GLES200, GLES300) // #115
_extension(120,OES,surfaceless_context, GLES200, GLES300) // #116 _extension(140,OES,surfaceless_context, GLES200, GLES300) // #116
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(121,OES,texture_compression_astc, GLES300, None) // #162 _extension(141,OES,texture_compression_astc, GLES300, None) // #162
_extension(122,OES,sample_shading, GLES300, GLES320) // #169 _extension(142,OES,sample_shading, GLES300, GLES320) // #169
_extension(123,OES,sample_variables, GLES300, GLES320) // #170 _extension(143,OES,sample_variables, GLES300, GLES320) // #170
_extension(124,OES,shader_image_atomic, GLES310, GLES320) // #171 _extension(144,OES,shader_image_atomic, GLES310, GLES320) // #171
_extension(125,OES,shader_multisample_interpolation, GLES300, GLES320) // #172 _extension(145,OES,shader_multisample_interpolation, GLES300, GLES320) // #172
#endif #endif
_extension(126,OES,texture_stencil8, GLES200, GLES320) // #173 _extension(146,OES,texture_stencil8, GLES200, GLES320) // #173
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(127,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174 _extension(147,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174
#endif #endif
} namespace OVR { } namespace OVR {
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(128,OVR,multiview, GLES300, None) // #241 _extension(148,OVR,multiview, GLES300, None) // #241
_extension(129,OVR,multiview2, GLES300, None) // #242 _extension(149,OVR,multiview2, GLES300, None) // #242
#endif #endif
} namespace MAGNUM { } namespace MAGNUM {
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(130,MAGNUM,shader_vertex_id, GLES300, GLES300) _extension(150,MAGNUM,shader_vertex_id, GLES300, GLES300)
#endif #endif
} }
#endif #endif

8
src/Magnum/GL/Implementation/pixelFormatMapping.hpp

@ -115,11 +115,17 @@ _n(RG16Unorm, LuminanceAlpha, UnsignedShort)
_n(RGB16Unorm, RGB, UnsignedShort) _n(RGB16Unorm, RGB, UnsignedShort)
_n(RGBA16Unorm, RGBA, UnsignedShort) _n(RGBA16Unorm, RGBA, UnsignedShort)
#endif #endif
#ifndef MAGNUM_TARGET_GLES /* Available everywhere except ES2 (WebGL 1 has it) */
#ifndef MAGNUM_TARGET_GLES2
_c(R16Snorm, Red, Short, R16Snorm) _c(R16Snorm, Red, Short, R16Snorm)
_c(RG16Snorm, RG, Short, RG16Snorm) _c(RG16Snorm, RG, Short, RG16Snorm)
_c(RGB16Snorm, RGB, Short, RGB16Snorm) _c(RGB16Snorm, RGB, Short, RGB16Snorm)
_c(RGBA16Snorm, RGBA, Short, RGBA16Snorm) _c(RGBA16Snorm, RGBA, Short, RGBA16Snorm)
#elif defined(MAGNUM_TARGET_GLES2) && defined(MAGNUM_TARGET_WEBGL)
_c(R16Snorm, Luminance, Short, R16Snorm)
_c(RG16Snorm, LuminanceAlpha, Short, RG16Snorm)
_c(RGB16Snorm, RGB, Short, RGB16Snorm)
_c(RGBA16Snorm, RGBA, Short, RGBA16Snorm)
#else #else
_s(R16Snorm) _s(R16Snorm)
_s(RG16Snorm) _s(RG16Snorm)

6
src/Magnum/GL/PixelFormat.cpp

@ -135,7 +135,8 @@ UnsignedInt pixelSize(const PixelFormat format, const PixelType type) {
#endif #endif
size = 1; break; size = 1; break;
case PixelType::UnsignedShort: case PixelType::UnsignedShort:
#ifndef MAGNUM_TARGET_GLES2 /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
case PixelType::Short: case PixelType::Short:
#endif #endif
case PixelType::Half: case PixelType::Half:
@ -344,7 +345,8 @@ Debug& operator<<(Debug& debug, const PixelType value) {
_c(Byte) _c(Byte)
#endif #endif
_c(UnsignedShort) _c(UnsignedShort)
#ifndef MAGNUM_TARGET_GLES2 /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
_c(Short) _c(Short)
#endif #endif
_c(UnsignedInt) _c(UnsignedInt)

22
src/Magnum/GL/PixelFormat.h

@ -369,24 +369,28 @@ enum class PixelType: GLenum {
/** /**
* Each component unsigned short. * Each component unsigned short.
* @requires_gles30 For texture data only, extension @gl_extension{OES,depth_texture} * @requires_gles30 Extension @gl_extension{OES,depth_texture}
* or @gl_extension{ANGLE,depth_texture} in OpenGL ES 2.0. * or @gl_extension{ANGLE,depth_texture} in OpenGL ES 2.0 for depth
* @requires_gl Can't be used for framebuffer reading in OpenGL ES or * texture data
* WebGL. * @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl20 For texture data only, extension * for color texture data
* @webgl_extension{WEBGL,depth_texture} in WebGL 1.0. * @requires_webgl20 Extension @webgl_extension{WEBGL,depth_texture} in
* WebGL 1.0 for depth texture data
* @requires_webgl_extension @webgl_extension{EXT,texture_norm16} for color
* texture data
*/ */
UnsignedShort = GL_UNSIGNED_SHORT, UnsignedShort = GL_UNSIGNED_SHORT,
#ifndef MAGNUM_TARGET_GLES2 /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
/** /**
* Each component signed short. * Each component signed short.
* @requires_gl Can't be used for framebuffer reading in OpenGL ES or * @requires_gl Can't be used for framebuffer reading in OpenGL ES or
* WebGL. * WebGL.
* @requires_gles30 For texture data only, only @ref PixelType::UnsignedShort * @requires_gles30 For texture data only, only @ref PixelType::UnsignedShort
* is available in OpenGL ES 2.0. * is available in OpenGL ES 2.0.
* @requires_webgl20 For texture data only, only @ref PixelType::UnsignedShort * @requires_webgl20 For texture data only, @webgl_extension{EXT,texture_norm16}
* is available in WebGL 1.0. * in WebGL 1.0.
*/ */
Short = GL_SHORT, Short = GL_SHORT,
#endif #endif

44
src/Magnum/GL/RenderbufferFormat.h

@ -125,38 +125,60 @@ enum class RenderbufferFormat: GLenum {
#endif #endif
#endif #endif
#ifndef MAGNUM_TARGET_GLES /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
/** /**
* Red component, normalized unsigned short. * Red component, normalized unsigned short.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg} * @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats (such as * @requires_gles31 Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::R8) are available in OpenGL ES and WebGL. * @ref RenderbufferFormat::RG8) are available in OpenGL ES 3.0 and
* older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
R16 = GL_R16, R16 = GL_R16,
#else
R16 = GL_R16_EXT,
#endif
/** /**
* Red and green component, each normalized unsigned short. * Red and green component, each normalized unsigned short.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg} * @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats (such as * @requires_gles31 Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::RG8) are available in OpenGL ES and WebGL. * @ref RenderbufferFormat::RG8) are available in OpenGL ES 3.0 and
* older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RG16 = GL_RG16, RG16 = GL_RG16,
#else
RG16 = GL_RG16_EXT,
#endif
#ifndef MAGNUM_TARGET_GLES
/** /**
* RGB, each component normalized unsigned short. * RGB, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats (such as * @requires_gl Three-component formats are not renderable in OpenGL ES
* @ref RenderbufferFormat::RGBA8) are available in OpenGL ES and * or WebGL.
* WebGL.
*/ */
RGB16 = GL_RGB16, RGB16 = GL_RGB16,
#endif
/** /**
* RGBA, each component normalized unsigned short. * RGBA, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats (such as * @requires_gles31 Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::RGBA8) are available in OpenGL ES and * @ref RenderbufferFormat::RG8) are available in OpenGL ES 3.0 and
* WebGL. * older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RGBA16 = GL_RGBA16, RGBA16 = GL_RGBA16,
#else
RGBA16 = GL_RGBA16_EXT,
#endif
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2

2
src/Magnum/GL/TextureFormat.cpp

@ -87,7 +87,7 @@ Debug& operator<<(Debug& debug, const TextureFormat value) {
_c(RGB8Snorm) _c(RGB8Snorm)
_c(RGBA8Snorm) _c(RGBA8Snorm)
#endif #endif
#ifndef MAGNUM_TARGET_GLES #if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
_c(R16) _c(R16)
_c(RG16) _c(RG16)
_c(RGB16) _c(RGB16)

83
src/Magnum/GL/TextureFormat.h

@ -331,68 +331,117 @@ enum class TextureFormat: GLenum {
RGBA8Snorm = GL_RGBA8_SNORM, RGBA8Snorm = GL_RGBA8_SNORM,
#endif #endif
#ifndef MAGNUM_TARGET_GLES /* Available everywhere except ES2 (WebGL 1 has it) */
#if !(defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL))
/** /**
* Red component, normalized unsigned short. * Red component, normalized unsigned short.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg} * @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles30 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 2.0
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
R16 = GL_R16, R16 = GL_R16,
#else
R16 = GL_R16_EXT,
#endif
/** /**
* Red and green component, each normalized unsigned short. * Red and green component, each normalized unsigned short.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg} * @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RG16 = GL_RG16, RG16 = GL_RG16,
#else
RG16 = GL_RG16_EXT,
#endif
/** /**
* RGB, each component normalized unsigned short. * RGB, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RGB16 = GL_RGB16, RGB16 = GL_RGB16,
#else
RGB16 = GL_RGB16_EXT,
#endif
/** /**
* RGBA, each component normalized unsigned short. * RGBA, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RGBA16 = GL_RGBA16, RGBA16 = GL_RGBA16,
#else
RGBA16 = GL_RGBA16_EXT,
#endif
/** /**
* Red component, normalized signed short. * Red component, normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm} * @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
R16Snorm = GL_R16_SNORM, R16Snorm = GL_R16_SNORM,
#else
R16Snorm = GL_R16_SNORM_EXT,
#endif
/** /**
* Red and green component, each normalized signed short. * Red and green component, each normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm} * @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RG16Snorm = GL_RG16_SNORM, RG16Snorm = GL_RG16_SNORM,
#else
RG16Snorm = GL_RG16_SNORM_EXT,
#endif
/** /**
* RGB, each component normalized signed short. * RGB, each component normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm} * @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RGB16Snorm = GL_RGB16_SNORM, RGB16Snorm = GL_RGB16_SNORM,
#else
RGB16Snorm = GL_RGB16_SNORM_EXT,
#endif
/** /**
* RGBA, each component normalized signed short. * RGBA, each component normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm} * @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL * @requires_gles31 Only byte-sized normalized formats are available in
* ES and WebGL. * OpenGL ES 3.0 and older; not defined on ES2
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* @requires_webgl_extension Extension @webgl_extension{EXT,texture_norm16}
*/ */
#ifndef MAGNUM_TARGET_GLES
RGBA16Snorm = GL_RGBA16_SNORM, RGBA16Snorm = GL_RGBA16_SNORM,
#else
RGBA16Snorm = GL_RGBA16_SNORM_EXT,
#endif
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2

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

@ -25,6 +25,7 @@ extension EXT_texture_filter_anisotropic optional
extension EXT_disjoint_timer_query optional extension EXT_disjoint_timer_query optional
extension EXT_texture_compression_rgtc optional extension EXT_texture_compression_rgtc optional
extension EXT_texture_compression_bptc optional extension EXT_texture_compression_bptc optional
extension EXT_texture_norm16 optional
# These are used as a base for WEBGL_* extensions # These are used as a base for WEBGL_* extensions
extension EXT_color_buffer_float optional extension EXT_color_buffer_float optional
extension EXT_texture_compression_s3tc optional extension EXT_texture_compression_s3tc optional

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

@ -506,6 +506,17 @@ typedef khronos_uint64_t GLuint64;
#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E
#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F
/* GL_EXT_texture_norm16 */
#define GL_R16_EXT 0x822A
#define GL_RG16_EXT 0x822C
#define GL_RGBA16_EXT 0x805B
#define GL_RGB16_EXT 0x8054
#define GL_R16_SNORM_EXT 0x8F98
#define GL_RG16_SNORM_EXT 0x8F99
#define GL_RGB16_SNORM_EXT 0x8F9A
#define GL_RGBA16_SNORM_EXT 0x8F9B
/* GL_EXT_texture_compression_s3tc */ /* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0

1
src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt vendored

@ -11,6 +11,7 @@ extension EXT_color_buffer_float optional
extension EXT_texture_compression_rgtc optional extension EXT_texture_compression_rgtc optional
extension EXT_texture_compression_bptc optional extension EXT_texture_compression_bptc optional
extension EXT_clip_cull_distance optional extension EXT_clip_cull_distance optional
extension EXT_texture_norm16 optional
extension EXT_draw_buffers_indexed optional extension EXT_draw_buffers_indexed optional
# WebGL has only OVR_multiview2, but we need the definitions from OVR_multiview # WebGL has only OVR_multiview2, but we need the definitions from OVR_multiview
extension OVR_multiview optional extension OVR_multiview optional

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

@ -17,6 +17,7 @@ extension EXT_texture_border_clamp optional
extension EXT_texture_buffer optional extension EXT_texture_buffer optional
extension EXT_texture_cube_map_array optional extension EXT_texture_cube_map_array optional
extension EXT_primitive_bounding_box optional extension EXT_primitive_bounding_box optional
extension EXT_texture_norm16 optional
# extension KHR_texture_compression_astc_ldr optional # extension KHR_texture_compression_astc_ldr optional
extension KHR_debug optional extension KHR_debug optional
extension KHR_blend_equation_advanced optional extension KHR_blend_equation_advanced optional

11
src/MagnumExternal/OpenGL/GLES3/flextGL.h vendored

@ -1304,6 +1304,17 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen
#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE #define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE
/* GL_EXT_texture_norm16 */
#define GL_R16_EXT 0x822A
#define GL_RG16_EXT 0x822C
#define GL_RGBA16_EXT 0x805B
#define GL_RGB16_EXT 0x8054
#define GL_R16_SNORM_EXT 0x8F98
#define GL_RG16_SNORM_EXT 0x8F99
#define GL_RGB16_SNORM_EXT 0x8F9A
#define GL_RGBA16_SNORM_EXT 0x8F9B
/* GL_KHR_debug */ /* GL_KHR_debug */
#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 #define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242

11
src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h vendored

@ -759,6 +759,17 @@ typedef struct __GLsync *GLsync;
#define GL_CLIP_DISTANCE6_EXT 0x3006 #define GL_CLIP_DISTANCE6_EXT 0x3006
#define GL_CLIP_DISTANCE7_EXT 0x3007 #define GL_CLIP_DISTANCE7_EXT 0x3007
/* GL_EXT_texture_norm16 */
#define GL_R16_EXT 0x822A
#define GL_RG16_EXT 0x822C
#define GL_RGBA16_EXT 0x805B
#define GL_RGB16_EXT 0x8054
#define GL_R16_SNORM_EXT 0x8F98
#define GL_RG16_SNORM_EXT 0x8F99
#define GL_RGB16_SNORM_EXT 0x8F9A
#define GL_RGBA16_SNORM_EXT 0x8F9B
/* GL_EXT_draw_buffers_indexed */ /* GL_EXT_draw_buffers_indexed */
#define GL_BLEND_EQUATION_RGB 0x8009 #define GL_BLEND_EQUATION_RGB 0x8009

11
src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h vendored

@ -1296,6 +1296,17 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen
#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE #define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE
/* GL_EXT_texture_norm16 */
#define GL_R16_EXT 0x822A
#define GL_RG16_EXT 0x822C
#define GL_RGBA16_EXT 0x805B
#define GL_RGB16_EXT 0x8054
#define GL_R16_SNORM_EXT 0x8F98
#define GL_RG16_SNORM_EXT 0x8F99
#define GL_RGB16_SNORM_EXT 0x8F9A
#define GL_RGBA16_SNORM_EXT 0x8F9B
/* GL_KHR_debug */ /* GL_KHR_debug */
#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 #define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242

Loading…
Cancel
Save