citro3d/source/vbo.c

39 lines
791 B
C
Raw Normal View History

2014-12-20 21:34:19 +01:00
#include <c3d/buffers.h>
#include <string.h>
#include "context.h"
bool C3D_VBOInit(C3D_VBO* vbo, size_t capacity)
{
if (vbo->data) return false;
vbo->data = linearAlloc(capacity);
if (!vbo->data) return false;
vbo->capacity = capacity;
vbo->size = 0;
vbo->vertexCount = 0;
return true;
}
bool C3D_VBOAddData(C3D_VBO* vbo, const void* data, size_t size, int vertexCount)
{
size_t remaining = vbo->capacity - vbo->size;
if (remaining < size) return false;
memcpy((u8*)vbo->data + vbo->size, data, size);
vbo->size += size;
vbo->vertexCount += vertexCount;
return true;
}
void C3D_VBOFlush(C3D_VBO* vbo)
{
if (vbo->data)
GSPGPU_FlushDataCache(vbo->data, vbo->size);
2014-12-20 21:34:19 +01:00
}
void C3D_VBODelete(C3D_VBO* vbo)
{
if (!vbo->data) return;
linearFree(vbo->data);
vbo->data = NULL;
}