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
@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
- 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,pvrtc_sRGB} | done
@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_RG8} | done
@gl_extension{EXT,polygon_offset_clamp} | |
@ -552,6 +553,7 @@ Extension | Status
@webgl_extension{EXT,texture_compression_rgtc} | done
@webgl_extension{EXT,texture_compression_bptc} | done
@webgl_extension{EXT,clip_cull_distance} | done
@webgl_extension{EXT,texture_norm16} | done
@webgl_extension{EXT,draw_buffers_indexed} | done
@webgl_extension{OES,texture_float_linear} | done
@webgl_extension{OVR,multiview2} | |

28
src/Magnum/GL/AbstractTexture.cpp

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

2
src/Magnum/GL/Context.cpp

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

2
src/Magnum/GL/Context.h

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

146
src/Magnum/GL/Extensions.h

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

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

@ -115,11 +115,17 @@ _n(RG16Unorm, LuminanceAlpha, UnsignedShort)
_n(RGB16Unorm, RGB, UnsignedShort)
_n(RGBA16Unorm, RGBA, UnsignedShort)
#endif
#ifndef MAGNUM_TARGET_GLES
/* Available everywhere except ES2 (WebGL 1 has it) */
#ifndef MAGNUM_TARGET_GLES2
_c(R16Snorm, Red, Short, R16Snorm)
_c(RG16Snorm, RG, Short, RG16Snorm)
_c(RGB16Snorm, RGB, Short, RGB16Snorm)
_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
_s(R16Snorm)
_s(RG16Snorm)

6
src/Magnum/GL/PixelFormat.cpp

@ -135,7 +135,8 @@ UnsignedInt pixelSize(const PixelFormat format, const PixelType type) {
#endif
size = 1; break;
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:
#endif
case PixelType::Half:
@ -344,7 +345,8 @@ Debug& operator<<(Debug& debug, const PixelType value) {
_c(Byte)
#endif
_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)
#endif
_c(UnsignedInt)

22
src/Magnum/GL/PixelFormat.h

@ -369,24 +369,28 @@ enum class PixelType: GLenum {
/**
* Each component unsigned short.
* @requires_gles30 For texture data only, extension @gl_extension{OES,depth_texture}
* or @gl_extension{ANGLE,depth_texture} in OpenGL ES 2.0.
* @requires_gl Can't be used for framebuffer reading in OpenGL ES or
* WebGL.
* @requires_webgl20 For texture data only, extension
* @webgl_extension{WEBGL,depth_texture} in WebGL 1.0.
* @requires_gles30 Extension @gl_extension{OES,depth_texture}
* or @gl_extension{ANGLE,depth_texture} in OpenGL ES 2.0 for depth
* texture data
* @requires_es_extension OpenGL ES 3.1 and @gl_extension{EXT,texture_norm16}
* for color texture data
* @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,
#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.
* @requires_gl Can't be used for framebuffer reading in OpenGL ES or
* WebGL.
* @requires_gles30 For texture data only, only @ref PixelType::UnsignedShort
* is available in OpenGL ES 2.0.
* @requires_webgl20 For texture data only, only @ref PixelType::UnsignedShort
* is available in WebGL 1.0.
* @requires_webgl20 For texture data only, @webgl_extension{EXT,texture_norm16}
* in WebGL 1.0.
*/
Short = GL_SHORT,
#endif

44
src/Magnum/GL/RenderbufferFormat.h

@ -125,38 +125,60 @@ enum class RenderbufferFormat: GLenum {
#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.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::R8) are available in OpenGL ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats (such as
* @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,
#else
R16 = GL_R16_EXT,
#endif
/**
* Red and green component, each normalized unsigned short.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::RG8) are available in OpenGL ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats (such as
* @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,
#else
RG16 = GL_RG16_EXT,
#endif
#ifndef MAGNUM_TARGET_GLES
/**
* RGB, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::RGBA8) are available in OpenGL ES and
* WebGL.
* @requires_gl Three-component formats are not renderable in OpenGL ES
* or WebGL.
*/
RGB16 = GL_RGB16,
#endif
/**
* RGBA, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats (such as
* @ref RenderbufferFormat::RGBA8) are available in OpenGL ES and
* WebGL.
* @requires_gles31 Only byte-sized normalized formats (such as
* @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
RGBA16 = GL_RGBA16,
#else
RGBA16 = GL_RGBA16_EXT,
#endif
#endif
#ifndef MAGNUM_TARGET_GLES2

2
src/Magnum/GL/TextureFormat.cpp

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

83
src/Magnum/GL/TextureFormat.h

@ -331,68 +331,117 @@ enum class TextureFormat: GLenum {
RGBA8Snorm = GL_RGBA8_SNORM,
#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.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles30 Only byte-sized normalized formats are available in
* 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,
#else
R16 = GL_R16_EXT,
#endif
/**
* Red and green component, each normalized unsigned short.
* @requires_gl30 Extension @gl_extension{ARB,texture_rg}
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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,
#else
RG16 = GL_RG16_EXT,
#endif
/**
* RGB, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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
RGB16 = GL_RGB16,
#else
RGB16 = GL_RGB16_EXT,
#endif
/**
* RGBA, each component normalized unsigned short.
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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
RGBA16 = GL_RGBA16,
#else
RGBA16 = GL_RGBA16_EXT,
#endif
/**
* Red component, normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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
R16Snorm = GL_R16_SNORM,
#else
R16Snorm = GL_R16_SNORM_EXT,
#endif
/**
* Red and green component, each normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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
RG16Snorm = GL_RG16_SNORM,
#else
RG16Snorm = GL_RG16_SNORM_EXT,
#endif
/**
* RGB, each component normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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
RGB16Snorm = GL_RGB16_SNORM,
#else
RGB16Snorm = GL_RGB16_SNORM_EXT,
#endif
/**
* RGBA, each component normalized signed short.
* @requires_gl31 Extension @gl_extension{EXT,texture_snorm}
* @requires_gl Only byte-sized normalized formats are available in OpenGL
* ES and WebGL.
* @requires_gles31 Only byte-sized normalized formats 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
RGBA16Snorm = GL_RGBA16_SNORM,
#else
RGBA16Snorm = GL_RGBA16_SNORM_EXT,
#endif
#endif
#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_texture_compression_rgtc optional
extension EXT_texture_compression_bptc optional
extension EXT_texture_norm16 optional
# These are used as a base for WEBGL_* extensions
extension EXT_color_buffer_float 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_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 */
#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_bptc optional
extension EXT_clip_cull_distance optional
extension EXT_texture_norm16 optional
extension EXT_draw_buffers_indexed optional
# WebGL has only OVR_multiview2, but we need the definitions from OVR_multiview
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_cube_map_array optional
extension EXT_primitive_bounding_box optional
extension EXT_texture_norm16 optional
# extension KHR_texture_compression_astc_ldr optional
extension KHR_debug 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
/* 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 */
#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_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 */
#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
/* 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 */
#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242

Loading…
Cancel
Save