mirror of
https://github.com/aap/librw.git
synced 2024-11-25 13:15:43 +00:00
97 lines
1.8 KiB
C++
97 lines
1.8 KiB
C++
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <cassert>
|
|
|
|
#include <new>
|
|
|
|
#include "rwbase.h"
|
|
#include "rwplugin.h"
|
|
#include "rwpipeline.h"
|
|
#include "rwobjects.h"
|
|
#include "rwd3d.h"
|
|
|
|
using namespace std;
|
|
|
|
namespace rw {
|
|
namespace d3d {
|
|
|
|
#ifdef RW_D3D9
|
|
IDirect3DDevice9 *device = NULL;
|
|
#endif
|
|
|
|
int vertFormatMap[] = {
|
|
-1, VERT_FLOAT2, VERT_FLOAT3, -1, VERT_ARGB
|
|
};
|
|
|
|
void*
|
|
createIndexBuffer(uint32 length)
|
|
{
|
|
#ifdef RW_D3D9
|
|
IDirect3DIndexBuffer9 *ibuf;
|
|
device->CreateIndexBuffer(length, D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &ibuf, 0);
|
|
return ibuf;
|
|
#else
|
|
return new uint8[length];
|
|
#endif
|
|
}
|
|
|
|
uint16*
|
|
lockIndices(void *indexBuffer, uint32 offset, uint32 size, uint32 flags)
|
|
{
|
|
#ifdef RW_D3D9
|
|
uint16 *indices;
|
|
IDirect3DIndexBuffer9 *ibuf = (IDirect3DIndexBuffer9*)indexBuffer;
|
|
ibuf->Lock(offset, size, (void**)&indices, flags);
|
|
return indices;
|
|
#else
|
|
return (uint16*)indexBuffer;
|
|
#endif
|
|
}
|
|
|
|
void
|
|
unlockIndices(void *indexBuffer)
|
|
{
|
|
#ifdef RW_D3D9
|
|
IDirect3DIndexBuffer9 *ibuf = (IDirect3DIndexBuffer9*)indexBuffer;
|
|
ibuf->Unlock();
|
|
#endif
|
|
}
|
|
|
|
void*
|
|
createVertexBuffer(uint32 length, uint32 fvf, int32 pool)
|
|
{
|
|
#ifdef RW_D3D9
|
|
IDirect3DVertexBuffer9 *vbuf;
|
|
device->CreateVertexBuffer(length, D3DUSAGE_WRITEONLY, fvf, (D3DPOOL)pool, &vbuf, 0);
|
|
return vbuf;
|
|
#else
|
|
return new uint8[length];
|
|
#endif
|
|
}
|
|
|
|
uint8*
|
|
lockVertices(void *vertexBuffer, uint32 offset, uint32 size, uint32 flags)
|
|
{
|
|
#ifdef RW_D3D9
|
|
uint8 *verts;
|
|
IDirect3DVertexBuffer9 *vertbuf = (IDirect3DVertexBuffer9*)vertexBuffer;
|
|
vertbuf->Lock(offset, size, (void**)&verts, flags);
|
|
return verts;
|
|
#else
|
|
return (uint8*)vertexBuffer;
|
|
#endif
|
|
}
|
|
|
|
void
|
|
unlockVertices(void *vertexBuffer)
|
|
{
|
|
#ifdef RW_D3D9
|
|
IDirect3DVertexBuffer9 *vertbuf = (IDirect3DVertexBuffer9*)vertexBuffer;
|
|
vertbuf->Unlock();
|
|
#endif
|
|
}
|
|
|
|
}
|
|
}
|