X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Ftexturecube.h;h=0882a5e31004c3cef3e129b65ff24a2671e88fc0;hp=f5a364047874aa10569e2fe1a4c727e69b47063b;hb=HEAD;hpb=aead6d04308d7873dc99aa4572ce1590a89ebcbd diff --git a/source/texturecube.h b/source/texturecube.h deleted file mode 100644 index f5a36404..00000000 --- a/source/texturecube.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef MSP_GL_TEXTURECUBE_H_ -#define MSP_GL_TEXTURECUBE_H_ - -#include -#include -#include "texture.h" -#include "vector.h" - -namespace Msp { -namespace GL { - -enum TextureCubeFace -{ - POSITIVE_X = GL_TEXTURE_CUBE_MAP_POSITIVE_X, - NEGATIVE_X = GL_TEXTURE_CUBE_MAP_NEGATIVE_X, - POSITIVE_Y = GL_TEXTURE_CUBE_MAP_POSITIVE_Y, - NEGATIVE_Y = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, - POSITIVE_Z = GL_TEXTURE_CUBE_MAP_POSITIVE_Z, - NEGATIVE_Z = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z -}; - -/** -Cube map texture, consisting of six square faces. All of the faces must be of -the same size. A cube map texture is addressed by three-dimensional texture -coordinates, with a principal range of [-1, 1]. The face is first selected -according to the largest coordinate, and the remaining two coordinates are used -to sample the face image. The images are oriented so that the cross product of -the s and t axes will point into the cube. - -All faces of a cube map texture must be allocated for it to be usable. - -Requires OpenGL version 1.3. -*/ -class TextureCube: public Texture -{ -public: - class Loader: public Msp::DataFile::DerivedObjectLoader - { - public: - Loader(TextureCube &); - Loader(TextureCube &, Collection &); - private: - void init(); - - void external_image(TextureCubeFace, const std::string &); - void image_data(TextureCubeFace, const std::string &); - void raw_data(TextureCubeFace, const std::string &); - void storage(PixelFormat, unsigned); - }; - -private: - unsigned size; - unsigned levels; - unsigned allocated; - - static TextureCubeFace face_order[6]; - static Vector3 directions[6]; - static unsigned orientations[12]; - -public: - TextureCube(); - - /** Defines storage structure for the texture. If lv is zero, the number - of mipmap levels is automatically determined from storage dimensions. - - Must be called before an image can be uploaded. Once storage is defined, - it can't be changed. */ - void storage(PixelFormat fmt, unsigned size, unsigned lv = 0); - - /** Allocates storage for the cube faces. The contents are initially - undefined. If storage has already been allocated, does nothing. */ - void allocate(unsigned level); - - /** Uploads image data to a face. Storage must be defined beforehand. The - image data must have dimensions and format compatible with the defined - storage. */ - void image(TextureCubeFace face, unsigned level, - PixelFormat fmt, DataType type, const void *data); - - /** Updates a rectangular region of a face. Storage must be defined and - allocated beforehand. The update region must be fully inside the texture. - The data format must be compatible with the defined storage. */ - void sub_image(TextureCubeFace face, unsigned level, - int x, int y, unsigned w, unsigned h, - PixelFormat fmt, DataType type, const void *data); - - void image(TextureCubeFace, const Graphics::Image &, bool = false); - - virtual void image(const Graphics::Image &, unsigned, bool = false); - using Texture::image; - - unsigned get_size() const { return size; } -private: - unsigned get_n_levels() const; - unsigned get_level_size(unsigned) const; - -public: - /** Translates indices into face constants. Valid indices are between 0 - and 5, inclusive. */ - static TextureCubeFace enumerate_faces(unsigned); - - static unsigned get_face_index(TextureCubeFace); - - /** Returns a vector pointing out of the face. */ - static const Vector3 &get_face_direction(TextureCubeFace); - - /** Returns a vector in the direction of the s axis of the face. */ - static const Vector3 &get_s_direction(TextureCubeFace); - - /** Returns a vector in the direction of the t axis of the face. */ - static const Vector3 &get_t_direction(TextureCubeFace); - - /** Returns a vector pointing to the center a texel. */ - Vector3 get_texel_direction(TextureCubeFace, unsigned, unsigned); - - virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; } - virtual UInt64 get_data_size() const; - virtual void unload() { } -}; - -void operator>>(const LexicalConverter &, TextureCubeFace &); - -} // namespace GL -} // namespace Msp - -#endif