00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _OPENGL_TEXTURE_H_
00021 #define _OPENGL_TEXTURE_H_
00022
00023 #include <boost\utility.hpp>
00024 #include <GL\glew.h>
00025 #include <boost\shared_array.hpp>
00026 #include <boost\weak_ptr.hpp>
00027
00028 namespace TestFrameWork
00029 {
00030
00031 typedef boost::shared_array<char> TextureData;
00032
00033 enum OpenglTextureFormat
00034 {
00035 Red,
00036 RGB,
00037 RGB32F,
00038 RGBA,
00039 RGBA32F
00040 };
00041
00042 enum OpenglTextureFilter
00043 {
00044 Nearest,
00045 Linear
00046 };
00047
00048 enum OpenglTextureEdgeValue
00049 {
00050 Repeat,
00051 MirroredRepeat,
00052 ClampToEdge,
00053 ClampToBorder,
00054 Clamp
00055 };
00056
00057 class OpenglTexture :
00058 boost::noncopyable
00059 {
00060 public:
00061 OpenglTexture(TextureData data, OpenglTextureFormat format, size_t width,
00062 OpenglTextureFilter filter, OpenglTextureEdgeValue edge);
00063
00064 OpenglTexture(TextureData data, OpenglTextureFormat format, size_t width, size_t height,
00065 OpenglTextureFilter filter, OpenglTextureEdgeValue edge);
00066
00067 OpenglTexture(TextureData data, OpenglTextureFormat format, size_t width, size_t height, size_t depth,
00068 OpenglTextureFilter filter, OpenglTextureEdgeValue edge);
00069
00070 ~OpenglTexture(void);
00071
00072 void ModifyData(TextureData data, size_t width);
00073
00074 void ModifyData(TextureData data, size_t width, size_t height);
00075
00076 void ModifyData(TextureData data, size_t width, size_t height, size_t depth);
00077
00078 GLuint GetOpenglId(void) const;
00079
00080 GLenum GetTarget(void) const;
00081
00082 static GLenum Format2Gl(OpenglTextureFormat format);
00083
00084 static GLint Format2InternalFormat(OpenglTextureFormat format);
00085
00086 static GLfloat Filter2Gl(OpenglTextureFilter filter);
00087
00088 static GLint EdgeValue2Gl(OpenglTextureEdgeValue edge);
00089
00090 private:
00091 GLenum m_target;
00092
00093 GLenum m_format;
00094
00095 GLint m_internalFormat;
00096
00097 size_t m_width;
00098
00099 size_t m_height;
00100
00101 size_t m_depth;
00102
00103 GLuint m_id;
00104
00105 void CreateTexture1D(TextureData data, GLfloat filter, GLint edge);
00106
00107 void CreateTexture2D(TextureData data, GLfloat filter, GLint edge);
00108
00109 void CreateTexture3D(TextureData data, GLfloat filter, GLint edge);
00110
00111 void Configure(GLfloat filter, GLint edge) const;
00112 };
00113
00114 typedef boost::shared_ptr<OpenglTexture> OpenglTexturePtr;
00115 typedef boost::weak_ptr<OpenglTexture> OpenglTextureWeakPtr;
00116
00117 }
00118
00119 #endif