X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Ftexturecube.h;h=0882a5e31004c3cef3e129b65ff24a2671e88fc0;hp=9adf06978b4d396df7a906bcd881778d9f707ee4;hb=HEAD;hpb=d2efbd8a32efa2a3ee8542efc846277af19d63e0 diff --git a/source/texturecube.h b/source/texturecube.h deleted file mode 100644 index 9adf0697..00000000 --- a/source/texturecube.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef MSP_GL_TEXTURECUBE_H_ -#define MSP_GL_TEXTURECUBE_H_ - -#include -#include "texture.h" -#include "vector.h" -#include - -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 image_data(TextureCubeFace, const std::string &); - void raw_data(TextureCubeFace, const std::string &); - void storage(PixelFormat, unsigned); - }; - -private: - PixelFormat ifmt; - unsigned size; - unsigned allocated; - - static Vector3 directions[6]; - -public: - TextureCube(); - - /** Defines storage structure for the texture. Must be called before an - image can be uploaded. Once storage is defined, it can't be changed. */ - void storage(PixelFormat fmt, unsigned size); - - /** 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 &, bool = false); - - unsigned get_size() const { return size; } -private: - unsigned get_level_size(unsigned); - -public: - /** Translates indices into face constants. Valid indices are between 0 - and 5, inclusive. */ - static TextureCubeFace enumerate_faces(unsigned); - - /** 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