00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef KEOS_D3D9BUFFER_H
00023 #define KEOS_D3D9BUFFER_H
00024
00025 #include "KeosD3D9Prerequisites.h"
00026 #include "KeosBufferBase.h"
00027 #include "KeosD3D9Enum.h"
00028
00029 struct IDirect3DVertexBuffer9;
00030 struct IDirect3DIndexBuffer9;
00031
00032 namespace Keos
00033 {
00034
00037 template <class T>
00038 class CD3D9Buffer : public IBufferBase
00039 {
00040 public :
00041
00046 CD3D9Buffer(ulong nCount, T* pBuffer);
00047
00050 T* GetBuffer() const;
00051
00052 private :
00053
00056 virtual void* Lock(ulong nOffset, ulong nSize, ulong nFlags);
00057
00060 virtual void Unlock();
00061
00063 CSmartPtr<T, CCOMRefCounted> m_pBuffer;
00064 };
00065
00066
00067 typedef CD3D9Buffer<IDirect3DVertexBuffer9> CD3D9VertexBuffer;
00068 typedef CD3D9Buffer<IDirect3DIndexBuffer9> CD3D9IndexBuffer;
00069
00070
00071
00072
00073
00074
00075
00076
00077 template <class T>
00078 inline CD3D9Buffer<T>::CD3D9Buffer(ulong nCount, T* pBuffer) :
00079 IBufferBase(nCount),
00080 m_pBuffer (pBuffer)
00081 {}
00082
00083
00084 template <class T>
00085 inline T* CD3D9Buffer<T>::GetBuffer() const
00086 {
00087 return m_pBuffer;
00088 }
00089
00090
00091 template <class T>
00092 inline void* CD3D9Buffer<T>::Lock(ulong nOffset, ulong nSize, ulong nFlags)
00093 {
00094 void* pData = NULL;
00095 m_pBuffer->Lock(nOffset, nSize, &pData, CD3D9Enum::LockFlags(nFlags));
00096
00097 return pData;
00098 }
00099
00100
00101 template <class T>
00102 inline void CD3D9Buffer<T>::Unlock()
00103 {
00104 m_pBuffer->Unlock();
00105 }
00106
00107 }
00108
00109 #endif // KEOS_D3D9BUFFER_H