00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef VRS_RENDERTEXTUREGL_H
00026 #define VRS_RENDERTEXTUREGL_H
00027
00028 #include <vrs/opengl/openglconfig.h>
00029 #include <vrs/opengl/texturegl.h>
00030 #include <vrs/opengl/texture1dgl.h>
00031 #include <vrs/opengl/texture2dgl.h>
00032 #include <vrs/opengl/texture3dgl.h>
00033 #include <vrs/opengl/texturearray2dgl.h>
00034 #include <vrs/opengl/cubemaptexturegl.h>
00035 #include <vrs/opengl/fbo/rendertargetgl.h>
00036
00037 namespace VRS {
00038
00040 class VRS_CORE_API RenderTextureGL : public RenderTargetGL {
00043 public:
00044 RenderTextureGL(Texture1DGL* texture, unsigned int width, unsigned int mipMapLevel = 0,
00045 GLenum type = GL_UNSIGNED_BYTE, bool generateMipMap = true);
00046 RenderTextureGL(Texture2DGL* texture, unsigned int width, unsigned int height, unsigned int mipMapLevel = 0,
00047 GLenum type = GL_UNSIGNED_BYTE, bool generateMipMap = true);
00048 RenderTextureGL(CubeMapTextureGL* texture, GLenum textureTarget, unsigned int dim, unsigned int mipMapLevel = 0,
00049 GLenum type = GL_UNSIGNED_BYTE, bool generateMipMap = true);
00050 RenderTextureGL(Texture3DGL* texture, unsigned int width, unsigned int height, unsigned int depth,
00051 unsigned int mipMapLevel = 0, unsigned int zOffset = 0,
00052 GLenum type = GL_UNSIGNED_BYTE, bool generateMipMap = true
00053 );
00054 RenderTextureGL(TextureArray2DGL* texture, unsigned int width, unsigned int height, unsigned int depth,
00055 unsigned int mipMapLevel = 0, unsigned int zOffset = 0,
00056 GLenum type = GL_UNSIGNED_BYTE, bool generateMipMap = true
00057 );
00061 virtual GLenum renderTarget() const { return GL_TEXTURE; }
00063
00064 virtual unsigned int width() const;
00065 virtual unsigned int height() const;
00067
00068 TextureGL* getTexture() const;
00071 GLenum getTextureTarget() const;
00075 int getMipMapLevel() const;
00076 void setMipMapLevel(int level);
00080 int getZOffset() const;
00081 void setZOffset(int offset);
00085 GLenum getType() const;
00086 void setType(GLenum);
00089 bool generateMipMap() const;
00090 void generateMipMap(bool);
00094 unsigned int depth() const;
00096
00097 void setWidth(unsigned int width);
00098 void setHeight(unsigned int height);
00099 void setDepth(unsigned int depth);
00104 VRS_TYPEINFO(RenderTextureGL, RenderTargetGL);
00105 VRS_SERIALIZABLE(RenderTextureGL);
00106
00107 protected:
00108 RenderTextureGL() { }
00109
00110 private:
00111 SO<TextureGL> texture_;
00112 GLenum textureTarget_;
00113
00114 int mipMapLevel_;
00115 int zOffset_;
00116 GLenum type_;
00117 bool generateMipMap_;
00118
00119 unsigned int texWidth_;
00120 unsigned int texHeight_;
00121 unsigned int texDepth_;
00122 };
00123
00124
00125 inline GLenum RenderTextureGL::getTextureTarget() const { return textureTarget_; }
00126 inline unsigned int RenderTextureGL::width() const { return texWidth_; }
00127 inline unsigned int RenderTextureGL::height() const { return texHeight_; }
00128
00129
00130 inline TextureGL* RenderTextureGL::getTexture() const { return texture_; }
00131 inline int RenderTextureGL::getMipMapLevel() const { return mipMapLevel_; }
00132 inline int RenderTextureGL::getZOffset() const { return zOffset_; }
00133 inline GLenum RenderTextureGL::getType() const { return type_; }
00134 inline bool RenderTextureGL::generateMipMap() const { return generateMipMap_; }
00135 inline void RenderTextureGL::generateMipMap(bool generateMipmap){ generateMipMap_ = generateMipmap; }
00136 inline unsigned int RenderTextureGL::depth() const { return texDepth_; }
00137
00138 inline void RenderTextureGL::setWidth(unsigned int w) {
00139 if(w!=texWidth_) {
00140 texWidth_=w;
00141
00142 modified();
00143 }
00144 }
00145 inline void RenderTextureGL::setHeight(unsigned int h) {
00146 if(h!=texHeight_) {
00147 texHeight_=h;
00148
00149 modified();
00150 }
00151 }
00152 inline void RenderTextureGL::setDepth(unsigned int d) {
00153 if(d!=texDepth_) {
00154 texDepth_=d;
00155
00156 modified();
00157 }
00158 }
00159 inline void RenderTextureGL::setZOffset(int zOffset) {
00160 if(zOffset!=zOffset_) {
00161 zOffset_=zOffset;
00162
00163 modified();
00164 }
00165 }
00166
00167 }
00168
00169 #endif // VRS_RENDERTEXTUREGL_H