UniShader
1.0.0a
Interface for GPGPU and working with shader programs
|
00001 #pragma once 00002 #ifndef BUFFER_H 00003 #define BUFFER_H 00004 00005 #include <UniShader/Config.h> 00006 #include <UniShader/Utility.h> 00007 #include <UniShader/ObjectBase.h> 00008 00009 #include <memory> 00010 #include <vector> 00011 #include <string> 00012 #include <typeinfo> 00013 00014 UNISHADER_BEGIN 00015 00017 00021 class UniShader_API BufferBase : public ObjectBase{ 00022 protected: 00023 BufferBase(); 00024 public: 00025 typedef std::shared_ptr<BufferBase> Ptr; 00026 virtual const std::string& getClassName() const; 00027 ~BufferBase(); 00028 00030 00033 class FrequencyMode{ 00034 public: 00035 enum myEnum{NONE, 00036 STREAM, 00037 STATIC, 00038 DYNAMIC 00039 }; 00040 private: 00041 myEnum m_en; 00042 public: 00043 FrequencyMode(){} 00044 FrequencyMode(const FrequencyMode& ref):m_en(ref.m_en){} 00045 FrequencyMode(myEnum en){ m_en = en; } 00046 FrequencyMode& operator =(myEnum en){ m_en = en; return *this; } 00047 operator myEnum(){ return m_en; } 00048 }; 00049 00051 00054 class NatureMode{ 00055 public: 00056 enum myEnum{NONE, 00057 DRAW, 00058 READ, 00059 COPY 00060 }; 00061 private: 00062 myEnum m_en; 00063 public: 00064 NatureMode(){} 00065 NatureMode(const NatureMode& ref):m_en(ref.m_en){} 00066 NatureMode(myEnum en){ m_en = en; } 00067 NatureMode& operator =(myEnum en){ m_en = en; return *this; } 00068 operator myEnum(){ return m_en; } 00069 }; 00070 00072 00075 class SignalID{ 00076 public: 00077 enum Types{CHANGED 00078 }; 00079 }; 00080 00082 00086 bool clear(); 00087 00089 00092 unsigned int getGlID() const; 00093 00095 00098 FrequencyMode getFrequencyMode() const; 00099 00101 00104 NatureMode getNatureMode() const; 00105 00107 00111 void setFrequencyMode(FrequencyMode frequencyMode); 00112 00114 00118 void setNatureMode(NatureMode natureMode); 00119 00120 protected: 00122 00125 bool mapBuffer(void** mappedPtr) const; 00126 00128 bool unmapBuffer() const; 00129 00131 00136 bool setPlainData(const void* data, size_t size); 00137 00138 size_t m_byteSize; 00139 private: 00140 FrequencyMode m_frequencyMode; 00141 NatureMode m_natureMode; 00142 unsigned int m_bufferID; 00143 }; 00144 00146 00152 template <typename T> 00153 class Buffer : public BufferBase{ 00154 private: 00155 Buffer(); 00156 public: 00157 typedef std::shared_ptr<Buffer<T>> Ptr; 00158 typedef std::shared_ptr<const Buffer<T>> PtrConst; 00159 virtual const std::string& getClassName() const; 00160 ~Buffer(); 00161 00163 00166 static Ptr create(); 00167 00169 00174 bool getDataCopy(std::vector<T>& vec) const; 00175 00177 00183 bool getDataCopy(T* arr, unsigned int& size) const; 00184 00186 00193 std::string getString(unsigned int begin = 0, unsigned int count = 0, std::ostringstream& format = std::ostringstream()) const; 00194 00196 00200 bool setData(const std::vector<T>& vec); 00201 00203 00208 bool setData(const T* arr, unsigned int size); 00209 }; 00210 00211 UNISHADER_END 00212 00213 #include <UniShader/Buffer.inl> 00214 00215 #endif