本文整理汇总了C++中IDirect3DIndexBuffer9::GetDesc方法的典型用法代码示例。如果您正苦于以下问题:C++ IDirect3DIndexBuffer9::GetDesc方法的具体用法?C++ IDirect3DIndexBuffer9::GetDesc怎么用?C++ IDirect3DIndexBuffer9::GetDesc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDirect3DIndexBuffer9
的用法示例。
在下文中一共展示了IDirect3DIndexBuffer9::GetDesc方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: StripifyMeshSubset
bool StripifyMeshSubset(ID3DXMesh* mesh,
DWORD attribId,
ostream& meshfile)
{
// TODO: Fall back to tri lists if the strip size is too small
// TODO: Detect when a tri fan should be used instead of a tri list
// Convert to tri strips
IDirect3DIndexBuffer9* indices = NULL;
DWORD numIndices = 0;
ID3DXBuffer* strips = NULL;
DWORD numStrips = 0;
HRESULT hr;
hr = D3DXConvertMeshSubsetToStrips(mesh,
attribId,
0,
&indices,
&numIndices,
&strips,
&numStrips);
if (FAILED(hr))
{
cout << "Stripify failed\n";
return false;
}
cout << "Converted to " << numStrips << " strips\n";
cout << "Strip buffer size: " << strips->GetBufferSize() << '\n';
if (numStrips != strips->GetBufferSize() / 4)
{
cout << "Strip count is incorrect!\n";
return false;
}
bool index32 = false;
{
D3DINDEXBUFFER_DESC desc;
indices->GetDesc(&desc);
if (desc.Format == D3DFMT_INDEX32)
{
index32 = true;
}
else if (desc.Format == D3DFMT_INDEX16)
{
index32 = false;
}
else
{
cout << "Bad index format. Strange.\n";
return false;
}
}
void* indexData = NULL;
hr = indices->Lock(0, 0, &indexData, D3DLOCK_READONLY);
if (FAILED(hr))
{
cout << "Failed to lock index buffer: " << D3DErrorString(hr) << '\n';
return false;
}
{
DWORD* stripLengths = reinterpret_cast<DWORD*>(strips->GetBufferPointer());
int k = 0;
for (int i = 0; i < numStrips; i++)
{
if (stripLengths[i] == 0)
{
cout << "Bad triangle strip (length == 0) in mesh!\n";
return false;
}
if (index32)
{
DWORD* indices = reinterpret_cast<DWORD*>(indexData) + k;
int fanStart = checkForFan(stripLengths[i], indices);
if (fanStart != 1)
{
DumpTriStrip(stripLengths[i], indices, (int) attribId,
meshfile);
}
else
{
DumpTriStripAsFan(stripLengths[i], indices, (int) attribId,
fanStart, meshfile);
}
}
else
{
WORD* indices = reinterpret_cast<WORD*>(indexData) + k;
int fanStart = checkForFan(stripLengths[i], indices);
if (fanStart != 1)
{
DumpTriStrip(stripLengths[i], indices, (int) attribId,
meshfile);
}
else
{
DumpTriStripAsFan(stripLengths[i], indices, (int) attribId,
fanStart, meshfile);
//.........这里部分代码省略.........