librw/src/rwpipeline.h

59 lines
1.7 KiB
C++

namespace rw {
struct Atomic;
class Pipeline
{
public:
uint32 pluginID;
uint32 pluginData;
int32 platform;
Pipeline(uint32 platform);
};
class ObjPipeline : public Pipeline
{
public:
ObjPipeline(uint32 platform);
// not the most beautiful way of doing things but still
// better than virtual methods (i hope?).
struct {
void (*instance)(ObjPipeline *pipe, Atomic *atomic);
void (*uninstance)(ObjPipeline *pipe, Atomic *atomic);
void (*render)(ObjPipeline *pipe, Atomic *atomic);
} impl;
// just for convenience
void instance(Atomic *atomic) { this->impl.instance(this, atomic); }
void uninstance(Atomic *atomic) { this->impl.uninstance(this, atomic); }
void render(Atomic *atomic) { this->impl.render(this, atomic); }
};
void findMinVertAndNumVertices(uint16 *indices, uint32 numIndices, uint32 *minVert, int32 *numVertices);
// everything xbox, d3d8 and d3d9 may want to use
enum {
VERT_BYTE2 = 1,
VERT_BYTE3,
VERT_SHORT2,
VERT_SHORT3,
VERT_NORMSHORT2,
VERT_NORMSHORT3,
VERT_FLOAT2,
VERT_FLOAT3,
VERT_FLOAT4,
VERT_ARGB,
VERT_RGBA,
VERT_COMPNORM
};
void instV4d(int type, uint8 *dst, V4d *src, uint32 numVertices, uint32 stride);
void instV3d(int type, uint8 *dst, V3d *src, uint32 numVertices, uint32 stride);
void uninstV3d(int type, V3d *dst, uint8 *src, uint32 numVertices, uint32 stride);
void instTexCoords(int type, uint8 *dst, TexCoords *src, uint32 numVertices, uint32 stride);
void uninstTexCoords(int type, TexCoords *dst, uint8 *src, uint32 numVertices, uint32 stride);
bool32 instColor(int type, uint8 *dst, RGBA *src, uint32 numVertices, uint32 stride);
void uninstColor(int type, RGBA *dst, uint8 *src, uint32 numVertices, uint32 stride);
}