35 lines
1.4 KiB
C
35 lines
1.4 KiB
C
#include "opengl_buffer.h"
|
|
|
|
GLenum gnBufferTypeToGLEnum(gnBufferType type) {
|
|
switch (type) {
|
|
case GN_VERTEX_BUFFER: return GL_ARRAY_BUFFER;
|
|
case GN_INDEX_BUFFER: return GL_ELEMENT_ARRAY_BUFFER;
|
|
case GN_UNIFORM_BUFFER: return GL_UNIFORM_BUFFER;
|
|
case GN_STORAGE_BUFFER: return GL_SHADER_STORAGE_BUFFER;
|
|
}
|
|
}
|
|
|
|
gnReturnCode openglCreateBuffer(gnBufferHandle buffer, gnDevice device, gnBufferInfo info) {
|
|
buffer->buffer = malloc(sizeof(gnPlatformBuffer));
|
|
glCreateBuffers(1, &buffer->buffer->id);
|
|
buffer->buffer->type = gnBufferTypeToGLEnum(info.type);
|
|
buffer->buffer->usage = (info.usage == GN_DYNAMIC_DRAW) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
|
glNamedBufferData(buffer->buffer->id, info.size, NULL, buffer->buffer->usage);
|
|
return GN_SUCCESS;
|
|
}
|
|
void openglBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
|
|
glNamedBufferData(buffer->buffer->id, dataSize, data, buffer->buffer->usage);
|
|
}
|
|
void openglBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data) {
|
|
glNamedBufferSubData(buffer->buffer->id, offset, dataSize, data);
|
|
}
|
|
void* openglMapBuffer(gnBufferHandle buffer) {
|
|
return glMapNamedBuffer(buffer->buffer->id, GL_READ_WRITE);
|
|
}
|
|
void openglUnmapBuffer(gnBufferHandle buffer) {
|
|
glUnmapNamedBuffer(buffer->buffer->id);
|
|
}
|
|
void openglDestroyBuffer(gnBufferHandle buffer) {
|
|
glDeleteBuffers(1, &buffer->buffer->id);
|
|
}
|