00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GLIFT_SUB_TEXTURE_H_
00020 #define GLIFT_SUB_TEXTURE_H_
00021
00022 #include "singleTex.h"
00023 #include "../state/subPBuff.h"
00024 #include <arrayGutz.h>
00025
00026 namespace glift {
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 class _export_ SubTex : public SingleTex
00038 {
00039 public:
00040 SubTex( SingleTex* tex, GLenum channel=GL_RGBA);
00041 SubTex( const MultiTexOState& texState, SubPBuff* subPBuff, GLenum channel=GL_RGBA);
00042 SubTex( SingleTex* tex, int origin, int dimen, GLenum channel=GL_RGBA );
00043 SubTex( SingleTex* tex, const gutz::vec2i& origin, const gutz::vec2i& dimen, GLenum channel=GL_RGBA );
00044 SubTex( SingleTex* tex, const gutz::vec3i& origin, const gutz::vec3i& dimen, GLenum channel=GL_RGBA );
00045
00046 ~SubTex();
00047
00048
00049 SingleTex* tex() const {return m_tex;}
00050 const gutz::vec3i& origin() const {return m_origin;}
00051 virtual gutz::vec3i dimen() const {return m_dimen; }
00052 GLenum channel() const {return m_channel;}
00053
00054 virtual PBuffGlift* pbuff() const {return m_tex->pbuff(); }
00055 virtual GLenum texType() const {return m_tex->texType();}
00056 virtual GLuint texNum() const {return m_tex->texNum(); }
00057 virtual bool tryToBindPbuff() const {return m_tex->tryToBindPbuff();}
00058 inline virtual void copyToTex( int mipLevel, const gutz::vec3i& texOrig,
00059 const gutz::vec2i& screenOrig,
00060 const gutz::vec2i& copySize );
00061
00062
00063 virtual void getDataub( GLenum format, int mipLevel, gutz::arraybub& data );
00064 virtual void getDataf( GLenum format, int mipLevel, gutz::arraybf& data );
00065
00066
00067 virtual void setTexData( TexData* texData, int mipLevel=0, bool setTexSize=true ) { m_tex->setTexData(texData, mipLevel, setTexSize); }
00068 virtual void setTexState( TexObjState* texState ) { m_tex->setTexState(texState); }
00069 virtual void setTexState( const MultiTexOState& texState ) { m_tex->setTexState(texState); }
00070 virtual void tryToBindPbuff( bool tryToUsePbuff ) { m_tex->tryToBindPbuff(tryToUsePbuff); }
00071
00072
00073 void adjustTexCoord( gutz::arrayw2f& texCoord ) {}
00074
00075 protected:
00076
00077 virtual void bindDef();
00078 virtual void releaseDef();
00079
00080 private:
00081 SingleTex* m_tex;
00082 bool m_createdTex;
00083 gutz::vec3i m_origin;
00084 gutz::vec3i m_dimen;
00085 gutz::vec3f m_scale;
00086 gutz::vec3f m_bias;
00087 GLenum m_channel;
00088
00089 SubTex();
00090 void initMembers( SingleTex* tex, const gutz::vec3i& origin,
00091 const gutz::vec3i& dimen, GLenum channel );
00092 };
00093
00094 inline void SubTex::copyToTex( int mipLevel, const gutz::vec3i& texOrig, const gutz::vec2i& screenOrig,
00095 const gutz::vec2i& copySize )
00096 {
00097 m_tex->copyToTex(mipLevel, texOrig, screenOrig, copySize);
00098 }
00099
00100
00101 }
00102
00103 #endif
00104