You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.7 KiB
124 lines
3.7 KiB
#ifndef NVTRISTRIP_H |
|
#define NVTRISTRIP_H |
|
|
|
#ifndef NULL |
|
#define NULL 0 |
|
#endif |
|
|
|
#pragma comment(lib, "nvtristrip") |
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// Public interface for stripifier |
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
//GeForce1 and 2 cache size |
|
#define CACHESIZE_GEFORCE1_2 16 |
|
|
|
//GeForce3 cache size |
|
#define CACHESIZE_GEFORCE3 24 |
|
|
|
enum PrimType |
|
{ |
|
PT_LIST, |
|
PT_STRIP, |
|
PT_FAN |
|
}; |
|
|
|
struct PrimitiveGroup |
|
{ |
|
PrimType type; |
|
unsigned int numIndices; |
|
unsigned short* indices; |
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
PrimitiveGroup() : type(PT_STRIP), numIndices(0), indices(NULL) {} |
|
~PrimitiveGroup() |
|
{ |
|
if(indices) |
|
delete[] indices; |
|
indices = NULL; |
|
} |
|
}; |
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// SetCacheSize() |
|
// |
|
// Sets the cache size which the stripfier uses to optimize the data. |
|
// Controls the length of the generated individual strips. |
|
// This is the "actual" cache size, so 24 for GeForce3 and 16 for GeForce1/2 |
|
// You may want to play around with this number to tweak performance. |
|
// |
|
// Default value: 16 |
|
// |
|
void SetCacheSize(const unsigned int cacheSize); |
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// SetStitchStrips() |
|
// |
|
// bool to indicate whether to stitch together strips into one huge strip or not. |
|
// If set to true, you'll get back one huge strip stitched together using degenerate |
|
// triangles. |
|
// If set to false, you'll get back a large number of separate strips. |
|
// |
|
// Default value: true |
|
// |
|
void SetStitchStrips(const bool bStitchStrips); |
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// SetMinStripSize() |
|
// |
|
// Sets the minimum acceptable size for a strip, in triangles. |
|
// All strips generated which are shorter than this will be thrown into one big, separate list. |
|
// |
|
// Default value: 0 |
|
// |
|
void SetMinStripSize(const unsigned int minSize); |
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// SetListsOnly() |
|
// |
|
// If set to true, will return an optimized list, with no strips at all. |
|
// |
|
// Default value: false |
|
// |
|
void SetListsOnly(const bool bListsOnly); |
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// GenerateStrips() |
|
// |
|
// in_indices: input index list, the indices you would use to render |
|
// in_numIndices: number of entries in in_indices |
|
// primGroups: array of optimized/stripified PrimitiveGroups |
|
// numGroups: number of groups returned |
|
// |
|
// Be sure to call delete[] on the returned primGroups to avoid leaking mem |
|
// |
|
void GenerateStrips(const unsigned short* in_indices, const unsigned int in_numIndices, |
|
PrimitiveGroup** primGroups, unsigned short* numGroups); |
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////// |
|
// RemapIndices() |
|
// |
|
// Function to remap your indices to improve spatial locality in your vertex buffer. |
|
// |
|
// in_primGroups: array of PrimitiveGroups you want remapped |
|
// numGroups: number of entries in in_primGroups |
|
// numVerts: number of vertices in your vertex buffer, also can be thought of as the range |
|
// of acceptable values for indices in your primitive groups. |
|
// remappedGroups: array of remapped PrimitiveGroups |
|
// |
|
// Note that, according to the remapping handed back to you, you must reorder your |
|
// vertex buffer. |
|
// |
|
// Credit goes to the MS Xbox crew for the idea for this interface. |
|
// |
|
void RemapIndices(const PrimitiveGroup* in_primGroups, const unsigned short numGroups, |
|
const unsigned short numVerts, PrimitiveGroup** remappedGroups); |
|
|
|
#endif |