Browse Source

Updates for multisample array texture storage in ES 3.2.

pull/231/head
Vladimír Vondruš 9 years ago
parent
commit
175e5dbff0
  1. 14
      src/Magnum/AbstractTexture.cpp
  2. 3
      src/Magnum/AbstractTexture.h
  3. 2
      src/Magnum/Framebuffer.h
  4. 8
      src/Magnum/Implementation/TextureState.cpp
  5. 8
      src/Magnum/MultisampleTexture.h

14
src/Magnum/AbstractTexture.cpp

@ -1400,14 +1400,16 @@ void AbstractTexture::storageMultisampleImplementationFallback(const GLsizei sam
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
void AbstractTexture::storageMultisampleImplementationDefault(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) {
bindInternal();
#ifndef MAGNUM_TARGET_GLES
glTexStorage3DMultisample
#else
glTexStorage3DMultisampleOES
#endif
(_target, samples, GLenum(internalFormat), size.x(), size.y(), size.z(), fixedSampleLocations);
glTexStorage3DMultisample(_target, samples, GLenum(internalFormat), size.x(), size.y(), size.z(), fixedSampleLocations);
}
#ifdef MAGNUM_TARGET_GLES
void AbstractTexture::storageMultisampleImplementationOES(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) {
bindInternal();
glTexStorage3DMultisampleOES(_target, samples, GLenum(internalFormat), size.x(), size.y(), size.z(), fixedSampleLocations);
}
#endif
#endif
#ifndef MAGNUM_TARGET_GLES
void AbstractTexture::storageMultisampleImplementationDSA(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) {

3
src/Magnum/AbstractTexture.h

@ -612,6 +612,9 @@ class MAGNUM_EXPORT AbstractTexture: public AbstractObject {
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
void MAGNUM_LOCAL storageMultisampleImplementationDefault(GLsizei samples, TextureFormat internalFormat, const Vector2i& size, GLboolean fixedsamplelocations);
void MAGNUM_LOCAL storageMultisampleImplementationDefault(GLsizei samples, TextureFormat internalFormat, const Vector3i& size, GLboolean fixedsamplelocations);
#ifdef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL storageMultisampleImplementationOES(GLsizei samples, TextureFormat internalFormat, const Vector3i& size, GLboolean fixedsamplelocations);
#endif
#endif
#ifndef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL storageMultisampleImplementationDSA(GLsizei samples, TextureFormat internalFormat, const Vector2i& size, GLboolean fixedsamplelocations);

2
src/Magnum/Framebuffer.h

@ -785,7 +785,7 @@ class MAGNUM_EXPORT Framebuffer: public AbstractFramebuffer, public AbstractObje
* @requires_gl32 Extension @extension{ARB,texture_multisample}
* @requires_gles30 Multisample 2D array textures are not defined in
* OpenGL ES 2.0.
* @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/
* @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} /
* @extension{OES,texture_storage_multisample_2d_array}
* @requires_gles Multisample textures are not available in WebGL.
*/

8
src/Magnum/Implementation/TextureState.cpp

@ -391,7 +391,13 @@ TextureState::TextureState(Context& context, std::vector<std::string>& extension
}
#elif !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
storage2DMultisampleImplementation = &AbstractTexture::storageMultisampleImplementationDefault;
storage3DMultisampleImplementation = &AbstractTexture::storageMultisampleImplementationDefault;
if(context.isVersionSupported(Version::GLES320))
storage3DMultisampleImplementation = &AbstractTexture::storageMultisampleImplementationDefault;
else if(context.isExtensionSupported<Extensions::GL::OES::texture_storage_multisample_2d_array>())
storage3DMultisampleImplementation = &AbstractTexture::storageMultisampleImplementationOES;
else
storage3DMultisampleImplementation = nullptr;
#endif
/* Anisotropic filter implementation */

8
src/Magnum/MultisampleTexture.h

@ -97,7 +97,7 @@ Note that multisample textures don't support compressed formats.
older.
@requires_gles30 Multisample 2D array textures are not defined in OpenGL ES
2.0.
@requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/
@requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} /
@extension{OES,texture_storage_multisample_2d_array} for multisample 2D
array textures.
@requires_gles Multisample textures are not available in WebGL.
@ -204,7 +204,7 @@ template<UnsignedInt dimensions> class MultisampleTexture: public AbstractTextur
* @ref AbstractShaderProgram::maxImageUnits(),
* @fn_gl_keyword{BindImageTexture}
* @requires_gl42 Extension @extension{ARB,shader_image_load_store}
* @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/
* @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} /
* @extension{OES,texture_storage_multisample_2d_array} for
* multisample 2D array textures.
*/
@ -230,7 +230,7 @@ template<UnsignedInt dimensions> class MultisampleTexture: public AbstractTextur
* @ref AbstractShaderProgram::maxImageUnits(),
* @fn_gl_keyword{BindImageTexture}
* @requires_gl42 Extension @extension{ARB,shader_image_load_store}
* @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/
* @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} /
* @extension{OES,texture_storage_multisample_2d_array} for
* multisample 2D array textures.
*/
@ -334,7 +334,7 @@ typedef MultisampleTexture<2> MultisampleTexture2D;
@requires_gl32 Extension @extension{ARB,texture_multisample}
@requires_gles30 Not defined in OpenGL ES 2.0.
@requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/
@requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} /
@extension{OES,texture_storage_multisample_2d_array}
@requires_gles Multisample textures are not available in WebGL.
*/

Loading…
Cancel
Save