Browse Source

Compressed image support, part 5: added EXT_texture_compression_s3tc.

And related WebGL extension. Why the hell do they need their own naming
again?!
pull/107/head
Vladimír Vondruš 11 years ago
parent
commit
7aef7f44f5
  1. 3
      doc/opengl-support.dox
  2. 8
      src/Magnum/AbstractTexture.cpp
  3. 4
      src/Magnum/ColorFormat.cpp
  4. 36
      src/Magnum/ColorFormat.h
  5. 3
      src/Magnum/Context.cpp
  6. 3
      src/Magnum/Extensions.h
  7. 36
      src/Magnum/TextureFormat.h
  8. 1
      src/MagnumExternal/OpenGL/GL/extensions.txt
  9. 10
      src/MagnumExternal/OpenGL/GL/flextGL.h
  10. 2
      src/MagnumExternal/OpenGL/GL/flextGLPlatform.cpp
  11. 2
      src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt
  12. 1
      src/MagnumExternal/OpenGL/GLES2/extensions.txt
  13. 10
      src/MagnumExternal/OpenGL/GLES2/flextGL.h
  14. 10
      src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h
  15. 12
      src/MagnumExternal/OpenGL/GLES2/flextGLNaCl.h
  16. 2
      src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp
  17. 2
      src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt
  18. 1
      src/MagnumExternal/OpenGL/GLES3/extensions.txt
  19. 10
      src/MagnumExternal/OpenGL/GLES3/flextGL.h
  20. 10
      src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h
  21. 2
      src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp

3
doc/opengl-support.dox

@ -263,6 +263,7 @@ Extension | Status
@extension{AMD,shader_trinary_minmax} | done (shading language only)
@extension{ATI,texture_mirror_once} | done (GL 4.4 subset)
@extension{EXT,texture_filter_anisotropic} | done
@extension{EXT,texture_compression_s3tc} | done
@extension{EXT,texture_mirror_clamp} | only GL 4.4 subset
@extension{EXT,direct_state_access} | done for implemented functionality
@extension{EXT,texture_sRGB_decode} | done
@ -359,6 +360,7 @@ Extension | Status
@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_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc} | done
@es_extension{EXT,shader_integer_mix} | done (shading language only)
@es_extension{EXT,copy_image} | |
@es_extension{EXT,draw_buffers_indexed} | |
@ -430,6 +432,7 @@ Extension | Status
@webgl_extension{EXT,texture_filter_anisotropic} | done
@webgl_extension{EXT,sRGB} | done
@webgl_extension{EXT,disjoint_timer_query} | only time elapsed query
@webgl_extension{WEBGL,compressed_texture_s3tc} | done
@section opengl-unsupported Unsupported OpenGL features

8
src/Magnum/AbstractTexture.cpp

@ -575,6 +575,7 @@ ColorFormat AbstractTexture::imageFormatForInternalFormat(const TextureFormat in
case TextureFormat::CompressedRGBBptcUnsignedFloat:
case TextureFormat::CompressedRGBBptcSignedFloat:
#endif
case TextureFormat::CompressedRGBS3tcDxt1:
return ColorFormat::RGB;
#ifndef MAGNUM_TARGET_GLES2
@ -624,6 +625,9 @@ ColorFormat AbstractTexture::imageFormatForInternalFormat(const TextureFormat in
case TextureFormat::CompressedRGBABptcUnorm:
case TextureFormat::CompressedSRGBAlphaBptcUnorm:
#endif
case TextureFormat::CompressedRGBAS3tcDxt1:
case TextureFormat::CompressedRGBAS3tcDxt3:
case TextureFormat::CompressedRGBAS3tcDxt5:
return ColorFormat::RGBA;
#ifndef MAGNUM_TARGET_GLES2
@ -718,6 +722,10 @@ ColorType AbstractTexture::imageTypeForInternalFormat(const TextureFormat intern
case TextureFormat::CompressedRGBABptcUnorm:
case TextureFormat::CompressedSRGBAlphaBptcUnorm:
#endif
case TextureFormat::CompressedRGBS3tcDxt1:
case TextureFormat::CompressedRGBAS3tcDxt1:
case TextureFormat::CompressedRGBAS3tcDxt3:
case TextureFormat::CompressedRGBAS3tcDxt5:
return ColorType::UnsignedByte;
#ifndef MAGNUM_TARGET_GLES2

4
src/Magnum/ColorFormat.cpp

@ -154,6 +154,10 @@ Debug operator<<(Debug debug, const CompressedColorFormat value) {
_c(RGBABptcUnorm)
_c(SRGBAlphaBptcUnorm)
#endif
_c(RGBS3tcDxt1)
_c(RGBAS3tcDxt1)
_c(RGBAS3tcDxt3)
_c(RGBAS3tcDxt5)
#undef _c
}

36
src/Magnum/ColorFormat.h

@ -666,6 +666,42 @@ enum class CompressedColorFormat: GLenum {
*/
SRGBAlphaBptcUnorm = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM,
#endif
/**
* S3TC DXT1 compressed RGB. **Available only for 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
RGBS3tcDxt1 = GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed RGBA. **Available only for 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
RGBAS3tcDxt1 = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
/**
* S3TC DXT3 compressed RGBA. **Available only for 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
RGBAS3tcDxt3 = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
/**
* S3TC DXT5 compressed RGBA. **Available only for 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
RGBAS3tcDxt5 = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
};
/** @debugoperatorenum{Magnum::ColorFormat} */

3
src/Magnum/Context.cpp

@ -80,6 +80,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,ARB,transform_feedback_overflow_query),
_extension(GL,ATI,texture_mirror_once),
_extension(GL,EXT,texture_filter_anisotropic),
_extension(GL,EXT,texture_compression_s3tc),
_extension(GL,EXT,texture_mirror_clamp),
_extension(GL,EXT,direct_state_access),
_extension(GL,EXT,texture_sRGB_decode),
@ -237,6 +238,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,OES,element_index_uint),
_extension(GL,OES,texture_float_linear),
_extension(GL,OES,texture_half_float_linear),
_extension(GL,WEBGL,compressed_texture_s3tc),
_extension(GL,WEBGL,depth_texture),
_extension(GL,WEBGL,draw_buffers)};
#endif
@ -258,6 +260,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,EXT,disjoint_timer_query),
_extension(GL,EXT,texture_sRGB_decode),
_extension(GL,EXT,sRGB_write_control),
_extension(GL,EXT,texture_compression_s3tc),
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_integer_mix),
_extension(GL,EXT,copy_image),

3
src/Magnum/Extensions.h

@ -197,6 +197,7 @@ namespace GL {
_extension(GL,ATI,texture_mirror_once, GL210, None) // #221
} namespace EXT {
_extension(GL,EXT,texture_filter_anisotropic, GL210, None) // #187
_extension(GL,EXT,texture_compression_s3tc, GL210, None) // #198
/* EXT_framebuffer_object, EXT_packed_depth_stencil, EXT_framebuffer_blit,
EXT_framebuffer_multisample replaced with ARB_framebuffer_object */
_extension(GL,EXT,texture_mirror_clamp, GL210, None) // #298
@ -259,6 +260,7 @@ namespace GL {
#endif
} namespace WEBGL {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,WEBGL,compressed_texture_s3tc, GLES200, None) // #8
_extension(GL,WEBGL,depth_texture, GLES200, GLES300) // #9
_extension(GL,WEBGL,draw_buffers, GLES200, GLES300) // #18
#endif
@ -330,6 +332,7 @@ namespace GL {
#endif
_extension(GL,EXT,texture_sRGB_decode, GLES200, None) // #152
_extension(GL,EXT,sRGB_write_control, GLES200, None) // #153
_extension(GL,EXT,texture_compression_s3tc, GLES200, None) // #154
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,instanced_arrays, GLES200, GLES300) // #156
_extension(GL,EXT,draw_instanced, GLES200, GLES300) // #157

36
src/Magnum/TextureFormat.h

@ -926,6 +926,42 @@ enum class TextureFormat: GLenum {
CompressedSRGBAlphaBptcUnorm = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM,
#endif
/**
* S3TC DXT1 compressed RGB. **Available only on 2D, 3D, 2D array, cube map
* and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
CompressedRGBS3tcDxt1 = GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
/**
* S3TC DXT1 compressed RGBA. **Available only on 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
CompressedRGBAS3tcDxt1 = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
/**
* S3TC DXT3 compressed RGBA. **Available only on 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
CompressedRGBAS3tcDxt3 = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
/**
* S3TC DXT5 compressed RGBA. **Available only on 2D, 3D, 2D array, cube
* map and cube map array textures.**
* @requires_extension Extension @extension{EXT,texture_compression_s3tc}
* @requires_es_extension Extension @es_extension2{EXT,texture_compression_s3tc,texture_compression_s3tc}
* @requires_webgl_extension Extension @webgl_extension{WEBGL,compressed_texture_s3tc}
*/
CompressedRGBAS3tcDxt5 = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
/**
* Depth component, size implementation-dependent. Not supported in 3D
* textures. Not allowed in unemulated @ref Texture::setStorage()

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

@ -21,6 +21,7 @@ extension ARB_sparse_buffer optional
extension ARB_transform_feedback_overflow_query optional
extension ATI_texture_mirror_once optional
extension EXT_texture_filter_anisotropic optional
extension EXT_texture_compression_s3tc optional
extension EXT_texture_mirror_clamp optional
extension EXT_direct_state_access optional
extension EXT_texture_sRGB_decode optional

10
src/MagnumExternal/OpenGL/GL/flextGL.h vendored

@ -1629,6 +1629,13 @@ typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
/* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
/* GL_EXT_texture_mirror_clamp */
#define GL_MIRROR_CLAMP_EXT 0x8742
@ -2383,6 +2390,9 @@ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglVertexArrayVertexOffsetEXT)(GLuint, G
/* GL_EXT_shader_integer_mix */
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_filter_anisotropic */

2
src/MagnumExternal/OpenGL/GL/flextGLPlatform.cpp vendored

@ -337,6 +337,8 @@ void flextGLInit() {
/* GL_EXT_shader_integer_mix */
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_filter_anisotropic */
/* GL_EXT_texture_mirror_clamp */

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

@ -18,3 +18,5 @@ extension ANGLE_depth_texture optional
extension EXT_draw_buffers optional
extension EXT_texture_filter_anisotropic optional
# These are used as a base for WEBGL_* extensions
extension EXT_texture_compression_s3tc optional

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

@ -58,6 +58,7 @@ 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_texture_compression_s3tc optional
extension EXT_draw_buffers_indexed optional
extension EXT_texture_border_clamp optional
extension EXT_separate_shader_objects optional

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

@ -760,6 +760,13 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
/* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
/* GL_EXT_draw_buffers_indexed */
#define GL_BLEND_EQUATION_RGB 0x8009
@ -1436,6 +1443,9 @@ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglTexParameterIivEXT)(GLenum, GLenum, c
GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglTexParameterIuivEXT)(GLenum, GLenum, const GLuint *);
#define glTexParameterIuivEXT flextglTexParameterIuivEXT
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_filter_anisotropic */

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

@ -448,6 +448,13 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
/* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
/* Function prototypes */
/* GL_ANGLE_depth_texture */
@ -617,6 +624,9 @@ GLAPI void glDrawBuffersEXT(GLsizei, const GLenum *);
/* GL_EXT_shader_texture_lod */
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_filter_anisotropic */

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

@ -735,6 +735,13 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
/* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
/* GL_EXT_draw_buffers_indexed */
#define GL_BLEND_EQUATION_RGB 0x8009
@ -1613,6 +1620,11 @@ GL_APICALL void GL_APIENTRY GLES2TexParameterIuivEXT(GLenum, GLenum, const GLuin
#define glTexParameterIuivEXT GLES2TexParameterIuivEXT
#endif
/* GL_EXT_texture_compression_s3tc */
#ifndef GL_EXT_texture_compression_s3tc
#define GL_EXT_texture_compression_s3tc 1
#endif
/* GL_EXT_texture_filter_anisotropic */
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1

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

@ -164,6 +164,8 @@ void flextGLInit() {
flextglTexParameterIivEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, const GLint *)>(loader.load("glTexParameterIivEXT"));
flextglTexParameterIuivEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, const GLuint *)>(loader.load("glTexParameterIuivEXT"));
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_filter_anisotropic */
/* GL_EXT_texture_format_BGRA8888 */

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

@ -3,3 +3,5 @@
version 3.0 es
extension EXT_texture_filter_anisotropic optional
# These are used as a base for WEBGL_* extensions
extension EXT_texture_compression_s3tc optional

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

@ -13,6 +13,7 @@ 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_texture_compression_s3tc optional
extension EXT_shader_integer_mix optional
extension EXT_copy_image optional
extension EXT_draw_buffers_indexed optional

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

@ -946,6 +946,13 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
/* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
/* GL_EXT_draw_buffers_indexed */
#define GL_BLEND_EQUATION_RGB 0x8009
@ -1966,6 +1973,9 @@ GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglTexBufferEXT)(GLenum, GLenum, GLuint)
GLAPI FLEXTGL_EXPORT void(APIENTRY *flextglTexBufferRangeEXT)(GLenum, GLenum, GLuint, GLintptr, GLsizeiptr);
#define glTexBufferRangeEXT flextglTexBufferRangeEXT
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_cube_map_array */

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

@ -694,6 +694,13 @@ typedef khronos_ssize_t GLsizeiptr;
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
/* GL_EXT_texture_compression_s3tc */
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
/* Function prototypes */
/* GL_ES_VERSION_2_0 */
@ -948,6 +955,9 @@ GLAPI void glVertexAttribI4uiv(GLuint, const GLuint *);
GLAPI void glVertexAttribIPointer(GLuint, GLint, GLenum, GLsizei, const void *);
GLAPI void glWaitSync(GLsync, GLbitfield, GLuint64);
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_filter_anisotropic */

2
src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp vendored

@ -210,6 +210,8 @@ void flextGLInit() {
flextglTexBufferEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, GLuint)>(loader.load("glTexBufferEXT"));
flextglTexBufferRangeEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, GLuint, GLintptr, GLsizeiptr)>(loader.load("glTexBufferRangeEXT"));
/* GL_EXT_texture_compression_s3tc */
/* GL_EXT_texture_cube_map_array */
/* GL_EXT_texture_filter_anisotropic */

Loading…
Cancel
Save