00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
00017
00019
00020
00021
00023
00024
00025 #ifndef _ECBUFFER_H
00026 #define _ECBUFFER_H
00027
00028 #include <eclipseray/eclipse.h>
00029
00031
00036
00062
00064 class Buffer : public EclipseObject
00065 {
00066 DECLARE_PYTHON_HEADER;
00067
00068 public:
00069
00074 enum eBufferUsage
00075 {
00076 Usage_Position,
00077 Usage_Texcoord,
00078 Usage_Index,
00079 Usage_Raw
00080 };
00081
00082
00083
00084
00085
00086
00095 Buffer( eBufferUsage a_nUsage, size_t a_nElements );
00096
00097
00098
00099
00100
00113 void* Lock( size_t a_nContentOffset = 0, bool a_bDiscard = false );
00114
00120 void Unlock();
00121
00123 inline eBufferUsage GetUsage() const {return m_nUsage; }
00124
00126 inline size_t GetAllocatedSize() const { return m_nBufferSize; }
00127
00129 inline size_t GetElementCount() const {return m_nElementCount; }
00130
00131
00132
00133
00134
00140 static bool PyTypeCheck( PYOBJECT a_pObject );
00141
00146 virtual PYOBJECT PyAsString();
00147
00152 static void AppendBufferUsageTypes( PYOBJECT a_pPyModule );
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 DECLARE_PYTHON_OBJECT_METHOD( Buffer, lock );
00168
00169
00170
00171 DECLARE_PYTHON_OBJECT_METHOD( Buffer, append );
00172
00173
00174 DECLARE_PYTHON_OBJECT_METHOD( Buffer, unlock );
00175
00176
00177
00178
00179
00180 DECLARE_PYTHON_OBJECT_METHOD( Buffer, setData );
00181
00182
00183 DECLARE_PYTHON_OBJECT_METHOD( Buffer, clear );
00184
00185
00186
00187 DECLARE_PYTHON_OBJECT_METHOD( Buffer, data );
00188
00189 protected:
00190
00191
00192 ~Buffer();
00193
00194
00195 enum eDataType{ Type_UnsignedInt, Type_Float, Type_Byte };
00196
00197
00198 size_t GetByteSizeFromUsage( eBufferUsage a_nUsage );
00199
00200
00201 eDataType GetTypeFromUsage( eBufferUsage a_nUsage );
00202
00203
00204 size_t GetDataTypeSize( eDataType a_nDataType );
00205
00211 virtual void DeleteObject();
00212
00213
00214 private:
00215
00216 void* m_pBuffer;
00217 size_t m_nBufferSize;
00218 size_t m_nElementCount;
00219 eBufferUsage m_nUsage;
00220 eDataType m_nType;
00221 bool m_bLocked;
00222
00223 unsigned int m_nPyBufferMarker;
00224 size_t m_nPyDataTypeSize;
00225
00226
00227 };
00228
00229
00230 #endif