Descent3/lib/IMeshBuilder.h
2024-04-15 21:43:29 -06:00

65 lines
2.0 KiB
C++

#ifndef __IMESH_BUILDER_H__
#define __IMESH_BUILDER_H__
#include "IMeshHandle.h"
namespace RZ
{
namespace Renderer
{
class IMeshBuilder
{
public:
enum PrimitiveType
{
kTriangle,
kTriangleFan,
kTriangleStrip,
};
enum VertexType
{
kPosition = 0x01,
kColor = 0x02,
kTexture1 = 0x04,
//kTexture2 = 0x08,
kNormal = 0x10,
};
virtual ~IMeshBuilder(){ }
// Begin
// Begins the generation of a mesh. You must supply
// the primitive type, size of the vertex buffer, and
// the number of primitives.
// vertexFlags are a combination of VertexType values
// that represent what data should be stored in the verts.
virtual void Begin( PrimitiveType type, unsigned int vertexFlags, unsigned int numPrims, unsigned int numVerts, bool autogenNormals ) = 0;
// End
// Ends the build process which will cause the generation of the mesh data.
// Returned will be a handle to the mesh
virtual MeshHandle End( void ) = 0;
// SetStreamData
// Stores stream data for one or more vertex fields.
// streamId: Which field we are setting data for
// startVertIndex: Which vertex in vertex buffer are we starting at
// numVerts: How many full verts of data are we processing
// dataPtr: Incoming data. All data is float based.
// elementsPerField: How many floats-per-field for this data.
// NOTE: This is for verification purposes. Positions and
// Normals are 3 elements. Texture UVs are 2 elements. Colors
// are 4 elements.
// stride: The number of bytes from the START of one field to the next on the incoming stream.
virtual void SetStreamData( VertexType streamId, unsigned int startVertIndex, unsigned int numVerts, const float *dataPtr, unsigned int elementsPerField, unsigned int stride ) = 0;
// AddPrimitive
// Adds another primitive to the buffer.
virtual void AddPrimitive( unsigned int numVerts, unsigned int *vertexIndices ) = 0;
};
}
}
#endif