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
5 years ago
|
#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
|