Browse Source

Updates for texture border clamp support in ES 3.2.

pull/231/head
Vladimír Vondruš 9 years ago
parent
commit
1244a51148
  1. 46
      src/Magnum/AbstractTexture.cpp
  2. 4
      src/Magnum/AbstractTexture.h
  3. 8
      src/Magnum/CubeMapTexture.h
  4. 6
      src/Magnum/CubeMapTextureArray.h
  5. 16
      src/Magnum/Implementation/TextureState.cpp
  6. 2
      src/Magnum/Sampler.h
  7. 8
      src/Magnum/Texture.h
  8. 6
      src/Magnum/TextureArray.h

46
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);

4
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);

8
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.
*/

6
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) {

16
src/Magnum/Implementation/TextureState.cpp

@ -174,7 +174,7 @@ TextureState::TextureState(Context& context, std::vector<std::string>& 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<std::string>& 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<Extensions::GL::EXT::texture_border_clamp>()) {
parameterIuivImplementation = &AbstractTexture::parameterIImplementationEXT;
parameterIivImplementation = &AbstractTexture::parameterIImplementationEXT;
} else {
parameterIuivImplementation = nullptr;
parameterIivImplementation = nullptr;
}
#endif
/* Data invalidation implementation */
#ifndef MAGNUM_TARGET_GLES
if(context.isExtensionSupported<Extensions::GL::ARB::invalidate_subdata>()) {

2
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.

8
src/Magnum/Texture.h

@ -486,7 +486,7 @@ template<UnsignedInt dimensions> 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<UnsignedInt dimensions> 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<UnsignedInt dimensions> 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.
*/

6
src/Magnum/TextureArray.h

@ -331,7 +331,7 @@ template<UnsignedInt dimensions> 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<UnsignedInt dimensions> 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<UnsignedInt dimensions> 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.
*/

Loading…
Cancel
Save