3 #ifndef __SFJP_ROAST_EX__graphics__directx__dx10__buffer_HPP__
4 #define __SFJP_ROAST_EX__graphics__directx__dx10__buffer_HPP__
6 #include "roast/graphics/directx/dx10/device.hpp"
7 #include "roast/graphics/directx/shader_param.hpp" // Hmm...
17 ///////////////////////////////////////////////////////////////////////////
19 class buffer : /*public buffer_base,*/ protected iunknown_<::ID3D10Buffer>
22 typedef ::ID3D10Buffer _BufferT, _IfType;
25 exception_codes__head = exception_code_root::buffer,
27 buffer__CreateBuffer_Failed
33 buffer(device &d, D3D10_BIND_FLAG buffer_type, unsigned int size, const void* initial_data=NULL,
34 ::D3D10_USAGE access=D3D10_USAGE_DEFAULT, UINT cpu_access=0,
35 UINT memory_pitch=0, UINT slice_pitch=0, UINT misc_flags=0) : m_dev(d)
37 ::D3D10_BUFFER_DESC bufdesc;
38 //::ZeroMemory( &bufdesc, sizeof(bufdesc) );
39 bufdesc.BindFlags = buffer_type;
40 bufdesc.ByteWidth = size;
41 bufdesc.Usage = access;
42 bufdesc.CPUAccessFlags = (D3D10_CPU_ACCESS_FLAG)cpu_access;
43 bufdesc.MiscFlags = misc_flags;
45 ::D3D10_SUBRESOURCE_DATA srdata;
46 srdata.pSysMem = initial_data;
47 srdata.SysMemPitch = memory_pitch;
48 srdata.SysMemSlicePitch = slice_pitch;
50 ::HRESULT hr = m_dev.get_id3d_device_ptr()->CreateBuffer( &bufdesc, &srdata, &m_if );
52 throw api_error(buffer__CreateBuffer_Failed,
53 "ID3D10Device::CreateBuffer() Failed.", hr);
60 //////////////////////////////////////////////////////////////////////////////
62 _BufferT* get_buffer_ptr(){ return get_internal_ptr(); }
63 const _BufferT* get_buffer_ptr() const { return get_internal_ptr(); }
66 ///////////////////////////////////////////////////////////////////////////
68 template <typename VERTEX_TYPE>
69 class input_vertex_buffer : public buffer
72 input_vertex_buffer(device &d, const VERTEX_TYPE* initial_data, unsigned int size) : buffer(d,D3D10_BIND_VERTEX_BUFFER,size,initial_data){}
75 ///////////////////////////////////////////////////////////////////////////
81 #endif//__SFJP_ROAST_EX__graphics__directx__dx10__buffer_HPP__