From 1244a51148d20f7a3a56ac6b46dcb6fcdf2f2cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 27 Apr 2017 00:55:13 +0200 Subject: [PATCH] Updates for texture border clamp support in ES 3.2. --- src/Magnum/AbstractTexture.cpp | 46 +++++++++------------- src/Magnum/AbstractTexture.h | 4 ++ src/Magnum/CubeMapTexture.h | 8 ++-- src/Magnum/CubeMapTextureArray.h | 6 +-- src/Magnum/Implementation/TextureState.cpp | 16 +++++++- src/Magnum/Sampler.h | 2 +- src/Magnum/Texture.h | 8 ++-- src/Magnum/TextureArray.h | 6 +-- 8 files changed, 51 insertions(+), 45 deletions(-) diff --git a/src/Magnum/AbstractTexture.cpp b/src/Magnum/AbstractTexture.cpp index dccf5e2f8..def1e13a6 100644 --- a/src/Magnum/AbstractTexture.cpp +++ b/src/Magnum/AbstractTexture.cpp @@ -420,7 +420,7 @@ void AbstractTexture::setLodBias(const Float bias) { #ifndef MAGNUM_TARGET_WEBGL void AbstractTexture::setBorderColor(const Color4& color) { (this->*Context::current().state().texture->parameterfvImplementation)( - #ifndef MAGNUM_TARGET_GLES + #ifndef MAGNUM_TARGET_GLES2 GL_TEXTURE_BORDER_COLOR, #else GL_TEXTURE_BORDER_COLOR_EXT, @@ -430,23 +430,11 @@ void AbstractTexture::setBorderColor(const Color4& color) { #ifndef MAGNUM_TARGET_GLES2 void AbstractTexture::setBorderColor(const Vector4ui& color) { - (this->*Context::current().state().texture->parameterIuivImplementation)( - #ifndef MAGNUM_TARGET_GLES - GL_TEXTURE_BORDER_COLOR, - #else - GL_TEXTURE_BORDER_COLOR_EXT, - #endif - color.data()); + (this->*Context::current().state().texture->parameterIuivImplementation)(GL_TEXTURE_BORDER_COLOR, color.data()); } void AbstractTexture::setBorderColor(const Vector4i& color) { - (this->*Context::current().state().texture->parameterIivImplementation)( - #ifndef MAGNUM_TARGET_GLES - GL_TEXTURE_BORDER_COLOR, - #else - GL_TEXTURE_BORDER_COLOR_EXT, - #endif - color.data()); + (this->*Context::current().state().texture->parameterIivImplementation)(GL_TEXTURE_BORDER_COLOR, color.data()); } #endif #endif @@ -1146,14 +1134,16 @@ void AbstractTexture::parameterImplementationDSAEXT(GLenum parameter, const GLfl #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) void AbstractTexture::parameterIImplementationDefault(GLenum parameter, const GLuint* values) { bindInternal(); - #ifndef MAGNUM_TARGET_GLES - glTexParameterIuiv - #else - glTexParameterIuivEXT - #endif - (_target, parameter, values); + glTexParameterIuiv(_target, parameter, values); } +#ifdef MAGNUM_TARGET_GLES +void AbstractTexture::parameterIImplementationEXT(GLenum parameter, const GLuint* values) { + bindInternal(); + glTexParameterIuivEXT(_target, parameter, values); +} +#endif + #ifndef MAGNUM_TARGET_GLES void AbstractTexture::parameterIImplementationDSA(const GLenum parameter, const GLuint* const values) { glTextureParameterIuiv(_id, parameter, values); @@ -1167,14 +1157,16 @@ void AbstractTexture::parameterIImplementationDSAEXT(GLenum parameter, const GLu void AbstractTexture::parameterIImplementationDefault(GLenum parameter, const GLint* values) { bindInternal(); - #ifndef MAGNUM_TARGET_GLES - glTexParameterIiv - #else - glTexParameterIivEXT - #endif - (_target, parameter, values); + glTexParameterIiv(_target, parameter, values); } +#ifdef MAGNUM_TARGET_GLES +void AbstractTexture::parameterIImplementationEXT(GLenum parameter, const GLint* values) { + bindInternal(); + glTexParameterIivEXT(_target, parameter, values); +} +#endif + #ifndef MAGNUM_TARGET_GLES void AbstractTexture::parameterIImplementationDSA(const GLenum parameter, const GLint* const values) { glTextureParameterIiv(_id, parameter, values); diff --git a/src/Magnum/AbstractTexture.h b/src/Magnum/AbstractTexture.h index 3550fcce3..6c0c6c92a 100644 --- a/src/Magnum/AbstractTexture.h +++ b/src/Magnum/AbstractTexture.h @@ -539,6 +539,10 @@ class MAGNUM_EXPORT AbstractTexture: public AbstractObject { #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) void MAGNUM_LOCAL parameterIImplementationDefault(GLenum parameter, const GLuint* values); void MAGNUM_LOCAL parameterIImplementationDefault(GLenum parameter, const GLint* values); + #ifdef MAGNUM_TARGET_GLES + void MAGNUM_LOCAL parameterIImplementationEXT(GLenum parameter, const GLuint* values); + void MAGNUM_LOCAL parameterIImplementationEXT(GLenum parameter, const GLint* values); + #endif #endif #ifndef MAGNUM_TARGET_GLES void MAGNUM_LOCAL parameterImplementationDSA(GLenum parameter, GLint value); diff --git a/src/Magnum/CubeMapTexture.h b/src/Magnum/CubeMapTexture.h index 527e00b4f..7042d63c4 100644 --- a/src/Magnum/CubeMapTexture.h +++ b/src/Magnum/CubeMapTexture.h @@ -351,7 +351,7 @@ class MAGNUM_EXPORT CubeMapTexture: public AbstractTexture { * * See @ref Texture::setBorderColor(const Color4&) for more * information. - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} or * @extension{NV,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. @@ -370,8 +370,7 @@ class MAGNUM_EXPORT CubeMapTexture: public AbstractTexture { * information. * @requires_gl30 Extension @extension{EXT,texture_integer} * @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{EXT,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. */ @@ -383,8 +382,7 @@ class MAGNUM_EXPORT CubeMapTexture: public AbstractTexture { /** @overload * @requires_gl30 Extension @extension{EXT,texture_integer} * @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{EXT,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. */ diff --git a/src/Magnum/CubeMapTextureArray.h b/src/Magnum/CubeMapTextureArray.h index 27983245d..274eee5b7 100644 --- a/src/Magnum/CubeMapTextureArray.h +++ b/src/Magnum/CubeMapTextureArray.h @@ -323,7 +323,7 @@ class MAGNUM_EXPORT CubeMapTextureArray: public AbstractTexture { * * See @ref Texture::setBorderColor(const Color4&) for more * information. - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} or * @extension{NV,texture_border_clamp} */ @@ -339,7 +339,7 @@ class MAGNUM_EXPORT CubeMapTextureArray: public AbstractTexture { * See @ref Texture::setBorderColor(const Vector4ui&) for more * information. * @requires_gl30 Extension @extension{EXT,texture_integer} - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} */ CubeMapTextureArray& setBorderColor(const Vector4ui& color) { @@ -349,7 +349,7 @@ class MAGNUM_EXPORT CubeMapTextureArray: public AbstractTexture { /** @overload * @requires_gl30 Extension @extension{EXT,texture_integer} - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} */ CubeMapTextureArray& setBorderColor(const Vector4i& color) { diff --git a/src/Magnum/Implementation/TextureState.cpp b/src/Magnum/Implementation/TextureState.cpp index 9604eac49..102861d98 100644 --- a/src/Magnum/Implementation/TextureState.cpp +++ b/src/Magnum/Implementation/TextureState.cpp @@ -174,7 +174,7 @@ TextureState::TextureState(Context& context, std::vector& extension parameterivImplementation = &AbstractTexture::parameterImplementationDefault; #endif parameterfvImplementation = &AbstractTexture::parameterImplementationDefault; - #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) + #ifndef MAGNUM_TARGET_GLES parameterIuivImplementation = &AbstractTexture::parameterIImplementationDefault; parameterIivImplementation = &AbstractTexture::parameterIImplementationDefault; #endif @@ -205,6 +205,20 @@ TextureState::TextureState(Context& context, std::vector& extension cubeCompressedSubImageImplementation = &CubeMapTexture::compressedSubImageImplementationDefault; } + /* Integer parameter implementation for ES3 */ + #if defined(MAGNUM_TARGET_GLES) && !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) + if(context.isVersionSupported(Version::GLES320)) { + parameterIuivImplementation = &AbstractTexture::parameterIImplementationDefault; + parameterIivImplementation = &AbstractTexture::parameterIImplementationDefault; + } else if(context.isExtensionSupported()) { + parameterIuivImplementation = &AbstractTexture::parameterIImplementationEXT; + parameterIivImplementation = &AbstractTexture::parameterIImplementationEXT; + } else { + parameterIuivImplementation = nullptr; + parameterIivImplementation = nullptr; + } + #endif + /* Data invalidation implementation */ #ifndef MAGNUM_TARGET_GLES if(context.isExtensionSupported()) { diff --git a/src/Magnum/Sampler.h b/src/Magnum/Sampler.h index 816257989..58fe1825a 100644 --- a/src/Magnum/Sampler.h +++ b/src/Magnum/Sampler.h @@ -125,7 +125,7 @@ class MAGNUM_EXPORT Sampler { * Clamp to border color. Coordinates out of range will be clamped * to border color (set with * @ref Texture::setBorderColor() "*Texture::setBorderColor()"). - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} or * @extension{NV,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. diff --git a/src/Magnum/Texture.h b/src/Magnum/Texture.h index d415c69ae..4cc222bef 100644 --- a/src/Magnum/Texture.h +++ b/src/Magnum/Texture.h @@ -486,7 +486,7 @@ template class Texture: public AbstractTexture { * @fn_gl_extension_keyword{TextureParameter,EXT,direct_state_access}, * eventually @fn_gl{ActiveTexture}, @fn_gl{BindTexture} and * @fn_gl_keyword{TexParameter} with @def_gl_keyword{TEXTURE_BORDER_COLOR} - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} or * @extension{NV,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. @@ -513,8 +513,7 @@ template class Texture: public AbstractTexture { * @fn_gl_keyword{TexParameter} with @def_gl_keyword{TEXTURE_BORDER_COLOR} * @requires_gl30 Extension @extension{EXT,texture_integer} * @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{EXT,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. */ @@ -526,8 +525,7 @@ template class Texture: public AbstractTexture { /** @overload * @requires_gl30 Extension @extension{EXT,texture_integer} * @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{EXT,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. */ diff --git a/src/Magnum/TextureArray.h b/src/Magnum/TextureArray.h index 1ba6130f0..03927715d 100644 --- a/src/Magnum/TextureArray.h +++ b/src/Magnum/TextureArray.h @@ -331,7 +331,7 @@ template class TextureArray: public AbstractTexture { * * See @ref Texture::setBorderColor(const Color4&) for more * information. - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} or * @extension{NV,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. @@ -348,7 +348,7 @@ template class TextureArray: public AbstractTexture { * See @ref Texture::setBorderColor(const Vector4ui&) for more * information. * @requires_gl30 Extension @extension{EXT,texture_integer} - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. */ @@ -359,7 +359,7 @@ template class TextureArray: public AbstractTexture { /** @overload * @requires_gl30 Extension @extension{EXT,texture_integer} - * @requires_es_extension Extension @extension{ANDROID,extension_pack_es31a}/ + * @requires_gles32 Extension @extension{ANDROID,extension_pack_es31a} / * @extension{EXT,texture_border_clamp} * @requires_gles Border clamp is not available in WebGL. */