]> git.tdb.fi Git - libs/gl.git/blob - source/texturecube.h
Comment updates for texture and framebuffer classes.
[libs/gl.git] / source / texturecube.h
1 #ifndef MSP_GL_TEXTURECUBE_H_
2 #define MSP_GL_TEXTURECUBE_H_
3
4 #include "datatype.h"
5 #include "pixelformat.h"
6 #include "texture.h"
7
8 namespace Msp {
9 namespace GL {
10
11 enum TextureCubeFace
12 {
13         POSITIVE_X = GL_TEXTURE_CUBE_MAP_POSITIVE_X,
14         NEGATIVE_X = GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
15         POSITIVE_Y = GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
16         NEGATIVE_Y = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
17         POSITIVE_Z = GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
18         NEGATIVE_Z = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
19 };
20
21 /**
22 Cube map texture, consisting of six square faces.  All of the faces must be of
23 the same size.  A cube map texture is addressed by three-dimensional texture
24 coordinates, with a principal range of [-1, 1].  The face is first selected
25 according to the largest coordinate, and the remaining two coordinates are used
26 to sample the face image.
27
28 All faces of a cube map texture must be allocated for it to be usable.
29
30 Requires OpenGL version 1.3.
31 */
32 class TextureCube: public Texture
33 {
34 private:
35         PixelFormat ifmt;
36         unsigned size;
37         unsigned allocated;
38
39 public:
40         TextureCube();
41
42         /** Defines storage structure for the texture.  Must be called before an
43         image can be uploaded.  Once storage is defined, it can't be changed. */
44         void storage(PixelFormat fmt, unsigned size);
45
46         /** Allocates storage for the cube faces.  The contents are initially
47         undefined.  If storage has already been allocated, does nothing. */
48         void allocate(unsigned level);
49
50         /** Uploads image data to a face.  Storage must be defined beforehand.  The
51         image data must have dimensions and format compatible with the defined
52         storage. */
53         void image(TextureCubeFace face, unsigned level,
54                 PixelFormat fmt, DataType type, const void *data);
55
56         /** Updates a rectangular region of a face.  Storage must be defined and
57         allocated beforehand.  The update region must be fully inside the texture.
58         The data format must be compatible with the defined storage. */
59         void sub_image(TextureCubeFace face, unsigned level,
60                 int x, int y, unsigned w, unsigned h,
61                 PixelFormat fmt, DataType type, const void *data);
62
63         unsigned get_size() const { return size; }
64 private:
65         unsigned get_level_size(unsigned);
66 };
67
68 } // namespace GL
69 } // namespace Msp
70
71 #endif