UniShader  1.0.0a
Interface for GPGPU and working with shader programs
 All Classes Functions Typedefs Enumerations Enumerator
D:/Visual Studio 2010/Projects/Unishader project/Unishader/include/UniShader/TextureBuffer.h
00001 #pragma once
00002 #ifndef TEXTURE_BUFFER_H
00003 #define TEXTURE_BUFFER_H
00004 
00005 #include <UniShader/Config.h>
00006 #include <UniShader/Utility.h>
00007 #include <UniShader/ObjectBase.h>
00008 #include <UniShader/Signal.h>
00009 #include <UniShader/Buffer.h>
00010 #include <UniShader/TextureUnit.h>
00011 #include <UniShader/GLSLType.h>
00012 
00013 #include <memory>
00014 #include <string>
00015 #include <deque>
00016 
00017 UNISHADER_BEGIN
00018 
00020 
00031 class UniShader_API TextureBuffer : public SignalSender, public ObjectBase{
00032 private:
00033         TextureBuffer();
00034 public:
00035         typedef std::shared_ptr<TextureBuffer> Ptr; 
00036         typedef std::shared_ptr<const TextureBuffer> PtrConst; 
00037         virtual const std::string& getClassName() const; 
00038         ~TextureBuffer();
00039 
00041 
00044         class DataType{
00045         public:
00046                 enum myEnum{NONE, 
00047                                         CHAR, 
00048                                         UNSIGNED_CHAR, 
00049                                         SHORT, 
00050                                         UNSIGNED_SHORT, 
00051                                         HALF_FLOAT, 
00052                                         INT, 
00053                                         UNSIGNED_INT, 
00054                                         FLOAT 
00055                 };
00056         private:
00057                 myEnum m_en;
00058         public:
00059                 DataType(){}
00060                 DataType(const DataType& ref):m_en(ref.m_en){}
00061                 DataType(myEnum en){ m_en = en; }
00062                 DataType& operator =(myEnum en){ m_en = en; return *this; }
00063                 operator myEnum(){ return m_en; }
00064         };
00065 
00066 
00068 
00071         static Ptr create();
00072 
00074 
00080         void connectBuffer(BufferBase::Ptr buffer, unsigned char componentsNumber, DataType dataType);
00081 
00083 
00086         void disconnectBuffer();
00087 
00089 
00092         unsigned char getComponentsNumber() const;
00093 
00095 
00098         DataType getDataType() const;
00099 
00101 
00105         char getTextureUnitIndex() const;
00106 
00108 
00111         void setComponentsNumber(unsigned char componentsNumber);
00112 
00114 
00117         void setDataType(DataType dataType);
00118 
00120 
00124         bool prepare();
00125 
00127 
00131         void activate();
00132 
00134 
00138         void deactivate();
00139 private:
00140         TextureUnit m_unit;
00141         BufferBase::Ptr m_buffer;
00142         DataType m_dataType;
00143         unsigned int m_texture;
00144         unsigned int m_activeCount;
00145         unsigned char m_componentsNumber;
00146         bool m_prepared;
00147 };
00148 
00149 UNISHADER_END
00150 
00151 #endif