Open walbourn opened 7 years ago
Just curious, is there a way to determine if strips or lists will be better for user's GPU except checking the device ID?
There's really no modern GPU that strips is a better choice. You'd have to benchmark to find a case where it was better.
HRESULT WINAPI
D3DXConvertMeshSubsetToSingleStrip(
LPD3DXBASEMESH MeshIn,
DWORD AttribId,
DWORD IBOptions,
LPDIRECT3DINDEXBUFFER9 *ppIndexBuffer,
DWORD *pNumIndices);
HRESULT WINAPI
D3DXConvertMeshSubsetToStrips(
LPD3DXBASEMESH MeshIn,
DWORD AttribId,
DWORD IBOptions,
LPDIRECT3DINDEXBUFFER9 *ppIndexBuffer,
DWORD *pNumIndices,
LPD3DXBUFFER *ppStripLengths,
DWORD *pNumStrips);
The original D3DX mesh optimize function supported an option for stripifying
D3DXMESHOPT_STRIPREORDER
. We support this withOptimizeFaces
(passing 0 for the vertexCache size), but the resulting IB is still a triangle list as was the case in the original D3DX library.This proposed function would convert index buffers from
D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST
toD3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP
. See WikipediaOn older generation GPU hardware, using triangle strips over triangle lists was a performance win. This is no longer true on modern GPUs even mobile platforms. While it does result in slightly smaller indices, it is generally far more useful to use triangle lists and optimized for vertex cache reuse. The main reason to include this functionality in DirectXMesh is for completeness and for creating performance references.
NvTriStrip
Stewart, J. "Tunneling for Triangle Strips" PDF
Evans, F., Skiena, S., Varshney, A.; "Optimizing triangle strips for fast rendering", Visualization 1996. PDF
Akeley, K., Haeberli, P., Burns, D.; tomesh.c. C Program on SGI Developer's Toolbox CD, 1990