Browse Source

Refactored AbstractTexture internals.

Naming implementation functions similarly to GL function they are
wrapping, naming internal API functions similarly to public API.
pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
4a9b0b36ec
  1. 16
      src/AbstractTexture.cpp
  2. 46
      src/AbstractTexture.h
  3. 6
      src/CubeMapTexture.h
  4. 8
      src/CubeMapTextureArray.h
  5. 6
      src/Texture.h

16
src/AbstractTexture.cpp

@ -72,8 +72,8 @@ AbstractTexture::SubImage2DImplementation AbstractTexture::subImage2DImplementat
AbstractTexture::SubImage3DImplementation AbstractTexture::subImage3DImplementation = AbstractTexture::SubImage3DImplementation AbstractTexture::subImage3DImplementation =
&AbstractTexture::subImageImplementationDefault; &AbstractTexture::subImageImplementationDefault;
AbstractTexture::InvalidateImplementation AbstractTexture::invalidateImplementation = &AbstractTexture::invalidateImplementationNoOp; AbstractTexture::InvalidateImageImplementation AbstractTexture::invalidateImageImplementation = &AbstractTexture::invalidateImageImplementationNoOp;
AbstractTexture::InvalidateSubImplementation AbstractTexture::invalidateSubImplementation = &AbstractTexture::invalidateSubImplementationNoOp; AbstractTexture::InvalidateSubImageImplementation AbstractTexture::invalidateSubImageImplementation = &AbstractTexture::invalidateSubImageImplementationNoOp;
/* Check correctness of binary OR in setMinificationFilter(). If nobody fucks /* Check correctness of binary OR in setMinificationFilter(). If nobody fucks
anything up, this assert should produce the same results on all dimensions, anything up, this assert should produce the same results on all dimensions,
@ -244,8 +244,8 @@ void AbstractTexture::initializeContextBasedFunctionality(Context* context) {
if(context->isExtensionSupported<Extensions::GL::ARB::invalidate_subdata>()) { if(context->isExtensionSupported<Extensions::GL::ARB::invalidate_subdata>()) {
Debug() << "AbstractTexture: using" << Extensions::GL::ARB::invalidate_subdata::string() << "features"; Debug() << "AbstractTexture: using" << Extensions::GL::ARB::invalidate_subdata::string() << "features";
invalidateImplementation = &AbstractTexture::invalidateImplementationARB; invalidateImageImplementation = &AbstractTexture::invalidateImageImplementationARB;
invalidateSubImplementation = &AbstractTexture::invalidateSubImplementationARB; invalidateSubImageImplementation = &AbstractTexture::invalidateSubImageImplementationARB;
} }
#endif #endif
} }
@ -440,18 +440,18 @@ void AbstractTexture::subImageImplementationDSA(GLenum target, GLint level, cons
} }
#endif #endif
void AbstractTexture::invalidateImplementationNoOp(GLint) {} void AbstractTexture::invalidateImageImplementationNoOp(GLint) {}
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void AbstractTexture::invalidateImplementationARB(GLint level) { void AbstractTexture::invalidateImageImplementationARB(GLint level) {
glInvalidateTexImage(_id, level); glInvalidateTexImage(_id, level);
} }
#endif #endif
void AbstractTexture::invalidateSubImplementationNoOp(GLint, const Vector3i&, const Vector3i&) {} void AbstractTexture::invalidateSubImageImplementationNoOp(GLint, const Vector3i&, const Vector3i&) {}
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void AbstractTexture::invalidateSubImplementationARB(GLint level, const Vector3i& offset, const Vector3i& size) { void AbstractTexture::invalidateSubImageImplementationARB(GLint level, const Vector3i& offset, const Vector3i& size) {
glInvalidateTexSubImage(_id, level, offset.x(), offset.y(), offset.z(), size.x(), size.y(), size.z()); glInvalidateTexSubImage(_id, level, offset.x(), offset.y(), offset.z(), size.x(), size.y(), size.z());
} }
#endif #endif

46
src/AbstractTexture.h

@ -1141,7 +1141,7 @@ class MAGNUM_EXPORT AbstractTexture {
* @fn_gl{InvalidateTexImage} * @fn_gl{InvalidateTexImage}
*/ */
inline void invalidateImage(Int level) { inline void invalidateImage(Int level) {
(this->*invalidateImplementation)(level); (this->*invalidateImageImplementation)(level);
} }
/** /**
@ -1278,19 +1278,19 @@ class MAGNUM_EXPORT AbstractTexture {
#endif #endif
static SubImage3DImplementation subImage3DImplementation; static SubImage3DImplementation subImage3DImplementation;
typedef void(AbstractTexture::*InvalidateImplementation)(GLint); typedef void(AbstractTexture::*InvalidateImageImplementation)(GLint);
void MAGNUM_LOCAL invalidateImplementationNoOp(GLint level); void MAGNUM_LOCAL invalidateImageImplementationNoOp(GLint level);
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL invalidateImplementationARB(GLint level); void MAGNUM_LOCAL invalidateImageImplementationARB(GLint level);
#endif #endif
static InvalidateImplementation invalidateImplementation; static InvalidateImageImplementation invalidateImageImplementation;
typedef void(AbstractTexture::*InvalidateSubImplementation)(GLint, const Vector3i&, const Vector3i&); typedef void(AbstractTexture::*InvalidateSubImageImplementation)(GLint, const Vector3i&, const Vector3i&);
void MAGNUM_LOCAL invalidateSubImplementationNoOp(GLint level, const Vector3i& offset, const Vector3i& size); void MAGNUM_LOCAL invalidateSubImageImplementationNoOp(GLint level, const Vector3i& offset, const Vector3i& size);
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
void MAGNUM_LOCAL invalidateSubImplementationARB(GLint level, const Vector3i& offset, const Vector3i& size); void MAGNUM_LOCAL invalidateSubImageImplementationARB(GLint level, const Vector3i& offset, const Vector3i& size);
#endif #endif
static InvalidateSubImplementation invalidateSubImplementation; static InvalidateSubImageImplementation invalidateSubImageImplementation;
void MAGNUM_LOCAL destroy(); void MAGNUM_LOCAL destroy();
void MAGNUM_LOCAL move(); void MAGNUM_LOCAL move();
@ -1334,16 +1334,16 @@ template<> struct AbstractTexture::DataHelper<1> {
(texture->*storage1DImplementation)(target, levels, internalFormat, size); (texture->*storage1DImplementation)(target, levels, internalFormat, size);
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 1, void>::type set(AbstractTexture* texture, GLenum target, GLint level, InternalFormat internalFormat, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 1, void>::type setImage(AbstractTexture* texture, GLenum target, GLint level, InternalFormat internalFormat, Image* image) {
(texture->*image1DImplementation)(target, level, internalFormat, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*image1DImplementation)(target, level, internalFormat, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 1, void>::type setSub(AbstractTexture* texture, GLenum target, GLint level, const Math::Vector<1, GLint>& offset, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 1, void>::type setSubImage(AbstractTexture* texture, GLenum target, GLint level, const Math::Vector<1, GLint>& offset, Image* image) {
(texture->*subImage1DImplementation)(target, level, offset, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*subImage1DImplementation)(target, level, offset, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
inline static void invalidateSub(AbstractTexture* texture, GLint level, const Math::Vector<1, GLint>& offset, const Math::Vector<1, GLint>& size) { inline static void invalidateSubImage(AbstractTexture* texture, GLint level, const Math::Vector<1, GLint>& offset, const Math::Vector<1, GLint>& size) {
(texture->*invalidateSubImplementation)(level, {offset[0], 0, 0}, {size[0], 1, 1}); (texture->*invalidateSubImageImplementation)(level, {offset[0], 0, 0}, {size[0], 1, 1});
} }
}; };
#endif #endif
@ -1369,20 +1369,20 @@ template<> struct MAGNUM_EXPORT AbstractTexture::DataHelper<2> {
(texture->*storage2DImplementation)(target, levels, internalFormat, size); (texture->*storage2DImplementation)(target, levels, internalFormat, size);
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 2, void>::type set(AbstractTexture* texture, GLenum target, GLint level, InternalFormat internalFormat, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 2, void>::type setImage(AbstractTexture* texture, GLenum target, GLint level, InternalFormat internalFormat, Image* image) {
(texture->*image2DImplementation)(target, level, internalFormat, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*image2DImplementation)(target, level, internalFormat, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 2, void>::type setSub(AbstractTexture* texture, GLenum target, GLint level, const Vector2i& offset, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 2, void>::type setSubImage(AbstractTexture* texture, GLenum target, GLint level, const Vector2i& offset, Image* image) {
(texture->*subImage2DImplementation)(target, level, offset, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*subImage2DImplementation)(target, level, offset, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 1, void>::type setSub(AbstractTexture* texture, GLenum target, GLint level, const Vector2i& offset, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 1, void>::type setSubImage(AbstractTexture* texture, GLenum target, GLint level, const Vector2i& offset, Image* image) {
(texture->*subImage2DImplementation)(target, level, offset, Vector2i(image->size(), 1), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*subImage2DImplementation)(target, level, offset, Vector2i(image->size(), 1), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
inline static void invalidateSub(AbstractTexture* texture, GLint level, const Vector2i& offset, const Vector2i& size) { inline static void invalidateSubImage(AbstractTexture* texture, GLint level, const Vector2i& offset, const Vector2i& size) {
(texture->*invalidateSubImplementation)(level, {offset, 0}, {size, 1}); (texture->*invalidateSubImageImplementation)(level, {offset, 0}, {size, 1});
} }
}; };
template<> struct MAGNUM_EXPORT AbstractTexture::DataHelper<3> { template<> struct MAGNUM_EXPORT AbstractTexture::DataHelper<3> {
@ -1407,20 +1407,20 @@ template<> struct MAGNUM_EXPORT AbstractTexture::DataHelper<3> {
(texture->*storage3DImplementation)(target, levels, internalFormat, size); (texture->*storage3DImplementation)(target, levels, internalFormat, size);
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 3, void>::type set(AbstractTexture* texture, GLenum target, GLint level, InternalFormat internalFormat, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 3, void>::type setImage(AbstractTexture* texture, GLenum target, GLint level, InternalFormat internalFormat, Image* image) {
(texture->*image3DImplementation)(target, level, internalFormat, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*image3DImplementation)(target, level, internalFormat, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 3, void>::type setSub(AbstractTexture* texture, GLenum target, GLint level, const Vector3i& offset, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 3, void>::type setSubImage(AbstractTexture* texture, GLenum target, GLint level, const Vector3i& offset, Image* image) {
(texture->*subImage3DImplementation)(target, level, offset, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*subImage3DImplementation)(target, level, offset, image->size(), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
template<class Image> inline static typename std::enable_if<Image::Dimensions == 2, void>::type setSub(AbstractTexture* texture, GLenum target, GLint level, const Vector3i& offset, Image* image) { template<class Image> inline static typename std::enable_if<Image::Dimensions == 2, void>::type setSubImage(AbstractTexture* texture, GLenum target, GLint level, const Vector3i& offset, Image* image) {
(texture->*subImage3DImplementation)(target, level, offset, Vector3i(image->size(), 1), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image)); (texture->*subImage3DImplementation)(target, level, offset, Vector3i(image->size(), 1), image->format(), image->type(), Implementation::ImageHelper<Image>::dataOrPixelUnpackBuffer(image));
} }
inline static void invalidateSub(AbstractTexture* texture, GLint level, const Vector3i& offset, const Vector3i& size) { inline static void invalidateSubImage(AbstractTexture* texture, GLint level, const Vector3i& offset, const Vector3i& size) {
(texture->*invalidateSubImplementation)(level, offset, size); (texture->*invalidateSubImageImplementation)(level, offset, size);
} }
}; };
#endif #endif

6
src/CubeMapTexture.h

@ -141,7 +141,7 @@ class CubeMapTexture: public AbstractTexture {
* See Texture::setImage() for more information. * See Texture::setImage() for more information.
*/ */
template<class Image> inline CubeMapTexture* setImage(Coordinate coordinate, Int level, InternalFormat internalFormat, Image* image) { template<class Image> inline CubeMapTexture* setImage(Coordinate coordinate, Int level, InternalFormat internalFormat, Image* image) {
DataHelper<2>::set(this, static_cast<GLenum>(coordinate), level, internalFormat, image); DataHelper<2>::setImage(this, static_cast<GLenum>(coordinate), level, internalFormat, image);
return this; return this;
} }
@ -157,7 +157,7 @@ class CubeMapTexture: public AbstractTexture {
* See Texture::setSubImage() for more information. * See Texture::setSubImage() for more information.
*/ */
template<class Image> inline CubeMapTexture* setSubImage(Coordinate coordinate, Int level, const Vector2i& offset, const Image* image) { template<class Image> inline CubeMapTexture* setSubImage(Coordinate coordinate, Int level, const Vector2i& offset, const Image* image) {
DataHelper<2>::setSub(this, static_cast<GLenum>(coordinate), level, offset, image); DataHelper<2>::setSubImage(this, static_cast<GLenum>(coordinate), level, offset, image);
return this; return this;
} }
@ -174,7 +174,7 @@ class CubeMapTexture: public AbstractTexture {
* See Texture::invalidateSubImage() for more information. * See Texture::invalidateSubImage() for more information.
*/ */
inline void invalidateSubImage(Int level, const Vector3i& offset, const Vector3i& size) { inline void invalidateSubImage(Int level, const Vector3i& offset, const Vector3i& size) {
DataHelper<3>::invalidateSub(this, level, offset, size); DataHelper<3>::invalidateSubImage(this, level, offset, size);
} }
/* Overloads to remove WTF-factor from method chaining order */ /* Overloads to remove WTF-factor from method chaining order */

8
src/CubeMapTextureArray.h

@ -144,7 +144,7 @@ class CubeMapTextureArray: public AbstractTexture {
* See Texture::setImage() for more information. * See Texture::setImage() for more information.
*/ */
template<class T> inline CubeMapTextureArray* setImage(Int level, InternalFormat internalFormat, T* image) { template<class T> inline CubeMapTextureArray* setImage(Int level, InternalFormat internalFormat, T* image) {
DataHelper<3>::set(this, GL_TEXTURE_CUBE_MAP_ARRAY, level, internalFormat, image); DataHelper<3>::setImage(this, GL_TEXTURE_CUBE_MAP_ARRAY, level, internalFormat, image);
return this; return this;
} }
@ -168,7 +168,7 @@ class CubeMapTextureArray: public AbstractTexture {
* @see setSubImage(Int, Coordinate, Int, const Math::Vector<2, Int>&, const Image*) * @see setSubImage(Int, Coordinate, Int, const Math::Vector<2, Int>&, const Image*)
*/ */
template<class Image> inline CubeMapTextureArray* setSubImage(Int level, const Vector3i& offset, const Image* image) { template<class Image> inline CubeMapTextureArray* setSubImage(Int level, const Vector3i& offset, const Image* image) {
DataHelper<3>::setSub(this, GL_TEXTURE_CUBE_MAP_ARRAY, level, offset, image, Vector3i(Math::Vector<Image::Dimensions, GLsizei>())); DataHelper<3>::setSubImage(this, GL_TEXTURE_CUBE_MAP_ARRAY, level, offset, image, Vector3i(Math::Vector<Image::Dimensions, GLsizei>()));
return this; return this;
} }
@ -187,7 +187,7 @@ class CubeMapTextureArray: public AbstractTexture {
* @see setSubImage(Int, const Math::Vector<3, Int>&, const Image*) * @see setSubImage(Int, const Math::Vector<3, Int>&, const Image*)
*/ */
template<class Image> inline CubeMapTextureArray* setSubImage(Int layer, Coordinate coordinate, Int level, const Vector2i& offset, const Image* image) { template<class Image> inline CubeMapTextureArray* setSubImage(Int layer, Coordinate coordinate, Int level, const Vector2i& offset, const Image* image) {
DataHelper<3>::setSub(this, GL_TEXTURE_CUBE_MAP_ARRAY, level, Vector3i(offset, layer*6+static_cast<GLsizei>(coordinate)), image, Vector2i(Math::Vector<Image::Dimensions, GLsizei>())); DataHelper<3>::setSubImage(this, GL_TEXTURE_CUBE_MAP_ARRAY, level, Vector3i(offset, layer*6+static_cast<GLsizei>(coordinate)), image, Vector2i(Math::Vector<Image::Dimensions, GLsizei>()));
return this; return this;
} }
@ -204,7 +204,7 @@ class CubeMapTextureArray: public AbstractTexture {
* See Texture::invalidateSubImage() for more information. * See Texture::invalidateSubImage() for more information.
*/ */
inline void invalidateSubImage(Int level, const Vector3i& offset, const Vector3i& size) { inline void invalidateSubImage(Int level, const Vector3i& offset, const Vector3i& size) {
DataHelper<3>::invalidateSub(this, level, offset, size); DataHelper<3>::invalidateSubImage(this, level, offset, size);
} }
/* Overloads to remove WTF-factor from method chaining order */ /* Overloads to remove WTF-factor from method chaining order */

6
src/Texture.h

@ -273,7 +273,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* @fn_gl_extension{TextureImage3D,EXT,direct_state_access} * @fn_gl_extension{TextureImage3D,EXT,direct_state_access}
*/ */
template<class Image> inline Texture<Dimensions>* setImage(Int level, InternalFormat internalFormat, Image* image) { template<class Image> inline Texture<Dimensions>* setImage(Int level, InternalFormat internalFormat, Image* image) {
DataHelper<Dimensions>::set(this, _target, level, internalFormat, image); DataHelper<Dimensions>::setImage(this, _target, level, internalFormat, image);
return this; return this;
} }
@ -303,7 +303,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* @fn_gl_extension{TextureSubImage3D,EXT,direct_state_access} * @fn_gl_extension{TextureSubImage3D,EXT,direct_state_access}
*/ */
template<class Image> inline Texture<Dimensions>* setSubImage(Int level, const typename DimensionTraits<Dimensions, Int>::VectorType& offset, Image* image) { template<class Image> inline Texture<Dimensions>* setSubImage(Int level, const typename DimensionTraits<Dimensions, Int>::VectorType& offset, Image* image) {
DataHelper<Dimensions>::setSub(this, _target, level, offset, image); DataHelper<Dimensions>::setSubImage(this, _target, level, offset, image);
return this; return this;
} }
@ -318,7 +318,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* @see invalidateImage(), @fn_gl{InvalidateTexSubImage} * @see invalidateImage(), @fn_gl{InvalidateTexSubImage}
*/ */
inline void invalidateSubImage(Int level, const typename DimensionTraits<Dimensions, Int>::VectorType& offset, const typename DimensionTraits<Dimensions, Int>::VectorType& size) { inline void invalidateSubImage(Int level, const typename DimensionTraits<Dimensions, Int>::VectorType& offset, const typename DimensionTraits<Dimensions, Int>::VectorType& size) {
DataHelper<dimensions>::invalidateSub(this, level, offset, size); DataHelper<dimensions>::invalidateSubImage(this, level, offset, size);
} }
/* Overloads to remove WTF-factor from method chaining order */ /* Overloads to remove WTF-factor from method chaining order */

Loading…
Cancel
Save