mirror of
https://github.com/DrBeef/Raze.git
synced 2024-12-02 00:52:56 +00:00
5eb9af1e00
IQM model support and a few bugfixes.
66 lines
1.3 KiB
C++
66 lines
1.3 KiB
C++
#pragma once
|
|
|
|
|
|
|
|
struct FModelVertex
|
|
{
|
|
float x, y, z; // world position
|
|
float u, v; // texture coordinates
|
|
unsigned packedNormal; // normal vector as GL_INT_2_10_10_10_REV.
|
|
float lu, lv; // lightmap texture coordinates
|
|
float lindex; // lightmap texture index
|
|
uint8_t boneselector[4];
|
|
uint8_t boneweight[4];
|
|
|
|
void Set(float xx, float yy, float zz, float uu, float vv)
|
|
{
|
|
x = xx;
|
|
y = yy;
|
|
z = zz;
|
|
u = uu;
|
|
v = vv;
|
|
lu = 0.0f;
|
|
lv = 0.0f;
|
|
lindex = -1.0f;
|
|
}
|
|
|
|
void SetNormal(float nx, float ny, float nz)
|
|
{
|
|
int inx = clamp(int(nx * 512), -512, 511);
|
|
int iny = clamp(int(ny * 512), -512, 511);
|
|
int inz = clamp(int(nz * 512), -512, 511);
|
|
int inw = 0;
|
|
packedNormal = (inw << 30) | ((inz & 1023) << 20) | ((iny & 1023) << 10) | (inx & 1023);
|
|
}
|
|
|
|
void SetBoneSelector(int x, int y, int z, int w)
|
|
{
|
|
boneselector[0] = x;
|
|
boneselector[1] = y;
|
|
boneselector[2] = z;
|
|
boneselector[3] = w;
|
|
}
|
|
|
|
void SetBoneWeight(int x, int y, int z, int w)
|
|
{
|
|
boneweight[0] = x;
|
|
boneweight[1] = y;
|
|
boneweight[2] = z;
|
|
boneweight[3] = w;
|
|
}
|
|
};
|
|
|
|
#define VMO ((FModelVertex*)nullptr)
|
|
|
|
class IModelVertexBuffer
|
|
{
|
|
public:
|
|
virtual ~IModelVertexBuffer() { }
|
|
|
|
virtual FModelVertex *LockVertexBuffer(unsigned int size) = 0;
|
|
virtual void UnlockVertexBuffer() = 0;
|
|
|
|
virtual unsigned int *LockIndexBuffer(unsigned int size) = 0;
|
|
virtual void UnlockIndexBuffer() = 0;
|
|
};
|
|
|