X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Ftexturecube.h;h=127251d6497735b50267672807e8f4459b608988;hp=e738ab53beba296520c3d130744a82b8b3e4208c;hb=HEAD;hpb=be6ffe96ecb4707599fe1a6f620c348760213d46 diff --git a/source/core/texturecube.h b/source/core/texturecube.h index e738ab53..127251d6 100644 --- a/source/core/texturecube.h +++ b/source/core/texturecube.h @@ -19,16 +19,13 @@ enum TextureCubeFace }; /** -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. +Cube map texture, consisting of six square faces. -All faces of a cube map texture must be allocated for it to be usable. - -Requires OpenGL version 1.3. +A cube map texture is addressed by three-dimensional texture coordinates. The +coordinate vector is projected on the unit cube, with the largest coordinate +selecting the face and the remaining two used to sample from the face image. +The images are oriented so that the cross product of the s and t axes will +point into the cube. */ class TextureCube: public TextureCubeBackend { @@ -52,36 +49,38 @@ public: private: unsigned size = 0; - unsigned levels = 0; static const Vector3 directions[6]; static const unsigned orientations[12]; public: - /** Defines storage structure for the texture. If lv is zero, the number - of mipmap levels is automatically determined from storage dimensions. + /** Sets storage format and dimensions and allocates memory for the texture. + If lv is zero, a complete mipmap pyramid is automatically created. Storage + cannot be changed once set. */ + void storage(PixelFormat, unsigned size, unsigned lv = 0); - 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); + virtual void image(unsigned, const void *); - /** Updates the contents of a face. Storage must be defined beforehand. - The image data must have dimensions and format matching the defined - storage. */ - void image(TextureCubeFace face, unsigned level, const void *data); + /** Replaces contents of a single face. Allocated storage must exist. The + image data is interpreted according to the storage format and must have size + matching the selected mipmap level. */ + void image(TextureCubeFace, unsigned level, const void *); - /** Updates a rectangular region of a face. Storage must be defined - beforehand. The image data must be in a format mathing the defined storage - and the update region must be fully inside the face. */ - void sub_image(TextureCubeFace face, unsigned level, int x, int y, unsigned w, unsigned h, const void *data); + /** Replaces a rectangular region of a face. Allocated storage must exist. + The image data is interpreted according to the storage format and the region + must be fully inside the face. */ + void sub_image(TextureCubeFace, unsigned level, unsigned x, unsigned y, unsigned w, unsigned h, const void *); void image(TextureCubeFace, const Graphics::Image &); + /** Sets the texture's contents from an image. The image is treated as a + stack of square layers and its height must be six times its width. If + storage has not been allocated yet, it will be set to match the image. + Otherwise the image must be compatible with the existing storage. */ virtual void image(const Graphics::Image &, unsigned = 0); unsigned get_size() const { return size; } private: - unsigned get_n_levels() const; unsigned get_level_size(unsigned) const; public: @@ -94,12 +93,8 @@ public: /** 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. */ + /** Returns a vector pointing to the center of a texel. */ Vector3 get_texel_direction(TextureCubeFace, unsigned, unsigned); - - virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; } - virtual std::size_t get_data_size() const; - virtual void unload() { } }; void operator>>(const LexicalConverter &, TextureCubeFace &);