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) #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
void AbstractTexture::storageMultisampleImplementationDefault(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) { void AbstractTexture::storageMultisampleImplementationDefault(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) {
bindInternal(); bindInternal();
#ifndef MAGNUM_TARGET_GLES glTexStorage3DMultisample(_target, samples, GLenum(internalFormat), size.x(), size.y(), size.z(), fixedSampleLocations);
glTexStorage3DMultisample }
#else
glTexStorage3DMultisampleOES #ifdef MAGNUM_TARGET_GLES
#endif void AbstractTexture::storageMultisampleImplementationOES(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) {
(_target, samples, GLenum(internalFormat), size.x(), size.y(), size.z(), fixedSampleLocations); bindInternal();
glTexStorage3DMultisampleOES(_target, samples, GLenum(internalFormat), size.x(), size.y(), size.z(), fixedSampleLocations);
} }
#endif #endif
#endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void AbstractTexture::storageMultisampleImplementationDSA(const GLsizei samples, const TextureFormat internalFormat, const Vector3i& size, const GLboolean fixedSampleLocations) { 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) #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 Vector2i& size, GLboolean fixedsamplelocations);
void MAGNUM_LOCAL storageMultisampleImplementationDefault(GLsizei samples, TextureFormat internalFormat, const Vector3i& 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 #endif
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL storageMultisampleImplementationDSA(GLsizei samples, TextureFormat internalFormat, const Vector2i& size, GLboolean fixedsamplelocations); 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_gl32 Extension @extension{ARB,texture_multisample}
* @requires_gles30 Multisample 2D array textures are not defined in * @requires_gles30 Multisample 2D array textures are not defined in
* OpenGL ES 2.0. * 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} * @extension{OES,texture_storage_multisample_2d_array}
* @requires_gles Multisample textures are not available in WebGL. * @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) #elif !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
storage2DMultisampleImplementation = &AbstractTexture::storageMultisampleImplementationDefault; 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 #endif
/* Anisotropic filter implementation */ /* Anisotropic filter implementation */

8
src/Magnum/MultisampleTexture.h

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

Loading…
Cancel
Save