1 #pragma warning( disable : 4127 ) 3 template<
class VertexType,
bool bIndexed = true,
typename IndexType = UINT16>
9 raMaterial* pMaterial,
bool bAlpha =
false,
bool bAdditive =
false,
10 UINT numMaterials = 1);
16 virtual bool RenderMesh(LPCSTR techniqueName =
"");
53 return VertexType::GetVertexLayout();
58 return VertexType::GetNumElements();
63 if(
sizeof(IndexType) == 2)
64 return DXGI_FORMAT_R16_UINT;
66 return DXGI_FORMAT_R32_UINT;
72 template<
class VertexType,
bool bIndexed,
typename IndexType>
75 raMaterial* pMaterial,
bool bAlpha,
bool bAdditive,
95 D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
109 template<
class VertexType,
bool bIndexed,
typename IndexType>
117 template<
class VertexType,
bool bIndexed,
typename IndexType>
128 D3D11_BUFFER_DESC bufferDesc;
130 bufferDesc.Usage = D3D11_USAGE_DEFAULT;
131 bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
132 bufferDesc.CPUAccessFlags = 0;
133 bufferDesc.MiscFlags = 0;
135 D3D11_SUBRESOURCE_DATA InitData;
137 InitData.SysMemPitch = 0;
138 InitData.SysMemSlicePitch = 0;
143 template<
class VertexType,
bool bIndexed,
typename IndexType>
146 if(!bIndexed)
return;
150 D3D11_BUFFER_DESC bufferDesc;
151 bufferDesc.ByteWidth =
m_nIndices *
sizeof(IndexType);
152 bufferDesc.Usage = D3D11_USAGE_DEFAULT;
153 bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
154 bufferDesc.CPUAccessFlags = 0;
155 bufferDesc.MiscFlags = 0;
157 D3D11_SUBRESOURCE_DATA InitData;
162 template<
class VertexType,
bool bIndexed,
typename IndexType>
169 template<
class VertexType,
bool bIndexed,
typename IndexType>
180 template<
class VertexType,
bool bIndexed,
typename IndexType>
187 template<
class VertexType,
bool bIndexed,
typename IndexType>
225 if(pTechnique->IsValid())
228 pTechnique->GetDesc(&techDesc);
230 for(UINT p = 0; p < techDesc.
Passes; ++p )
243 template<
class VertexType,
bool bIndexed,
typename IndexType>
263 template<
class VertexType,
bool bIndexed,
typename IndexType>
268 if(*pRayDir ==
raVector3(0, 0, 0))
return false;
272 bool bIntersects =
false;
273 float mindist = FLT_MAX;
274 float u = 0, v = 0, dist = FLT_MAX;
276 for (UINT64 idx = 0; idx <
m_nIndices; idx += 3)
279 for(
int i = 0; i < 3; i++)
283 if(D3DXIntersectTri((D3DXVECTOR3*)&p[0], (D3DXVECTOR3*)&p[1], (D3DXVECTOR3*)&p[2],
284 (D3DXVECTOR3*)pRayPos,(D3DXVECTOR3*) pRayDir, &u, &v, &dist))
virtual void CreateVertexBuffer()
virtual UINT GetNumElements()
virtual DXGI_FORMAT GetIndexBufferFormat()
ID3D11DeviceContext * GetImmediateContext(void)
#define SAFE_DELETE_ARRAY(p)
interface ID3DX11EffectTechnique ID3DX11EffectTechnique
ID3D11Device * GetDevice(void)
virtual void ComputeBoundingBox()
virtual void CreateIndexBuffer()
virtual ID3D11Buffer * GetVertexBuffer()
virtual bool DestroyMesh()
virtual bool Intersects(const raVector3 *pRayPos, const raVector3 *pRayDir, float *pDist)
SDKMESH_SUBSET * m_pSubsets
virtual ID3D11Buffer * GetIndexBuffer()
virtual SDKMESH_SUBSET * GetSubset(UINT n)
virtual void DeleteTempData()
virtual UINT GetStrideSize()
raMaterial ** m_pMaterials
virtual UINT GetNumSubsets()
virtual const D3D11_INPUT_ELEMENT_DESC * GetVertexLayout()
raEntity(raSmartPointer< raDirectX >, raMaterial *pMaterial, bool bAlpha=false, bool bAdditive=false, UINT numMaterials=1)
virtual D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveTopology(UINT n)
virtual void SetupVertices()=0
raSmartPointer< raDirectX > m_dx
virtual bool CreateMesh()
ID3DX11EffectTechnique * GetEffectTechnique(LPCSTR techniqueName="")
virtual bool RenderMesh(LPCSTR techniqueName="")
virtual void SetupIndices()
virtual bool Intersects(const raVector3 *pRayPos, const raVector3 *pRayDir, float *pDist)