OpenGL buffers
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
#include "renderpass/opengl_render_pass_descriptor.h"
|
#include "renderpass/opengl_render_pass_descriptor.h"
|
||||||
#include "uniforms/pool/opengl_uniform_pool.h"
|
#include "uniforms/pool/opengl_uniform_pool.h"
|
||||||
#include "commands/pool/opengl_command_pool.h"
|
#include "commands/pool/opengl_command_pool.h"
|
||||||
|
#include "buffer/opengl_buffer.h"
|
||||||
|
|
||||||
gnDeviceFunctions loadOpenGLDeviceFunctions() {
|
gnDeviceFunctions loadOpenGLDeviceFunctions() {
|
||||||
return (gnDeviceFunctions){
|
return (gnDeviceFunctions){
|
||||||
@@ -27,11 +28,12 @@ gnDeviceFunctions loadOpenGLDeviceFunctions() {
|
|||||||
._gnCreateCommandPool = openglCreateCommandPool,
|
._gnCreateCommandPool = openglCreateCommandPool,
|
||||||
._gnDestroyCommandPool = openglDestroyCommandPool,
|
._gnDestroyCommandPool = openglDestroyCommandPool,
|
||||||
|
|
||||||
._gnCreateBuffer = NULL,
|
._gnCreateBuffer = openglCreateBuffer,
|
||||||
._gnBufferData = NULL,
|
._gnBufferData = openglBufferData,
|
||||||
._gnBufferSubData = NULL,
|
._gnBufferSubData = openglBufferSubData,
|
||||||
._gnMapBuffer = NULL,
|
._gnMapBuffer = openglMapBuffer,
|
||||||
._gnDestroyBuffer = NULL,
|
._gnUnmapBuffer = openglUnmapBuffer,
|
||||||
|
._gnDestroyBuffer = openglDestroyBuffer,
|
||||||
|
|
||||||
._gnCreateUniformPool = openglCreateUniformPool,
|
._gnCreateUniformPool = openglCreateUniformPool,
|
||||||
._gnUniformPoolAllocateUniforms = openglAllocateUniforms,
|
._gnUniformPoolAllocateUniforms = openglAllocateUniforms,
|
||||||
|
33
projects/apis/opengl/src/buffer/opengl_buffer.c
Normal file
33
projects/apis/opengl/src/buffer/opengl_buffer.c
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#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;
|
||||||
|
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);
|
||||||
|
}
|
15
projects/apis/opengl/src/buffer/opengl_buffer.h
Normal file
15
projects/apis/opengl/src/buffer/opengl_buffer.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "core/src/buffers/gryphn_buffer.h"
|
||||||
|
#include "glad/glad.h"
|
||||||
|
|
||||||
|
typedef struct gnPlatformBuffer_t {
|
||||||
|
GLuint id;
|
||||||
|
GLenum type, usage;
|
||||||
|
} gnPlatformBuffer;
|
||||||
|
|
||||||
|
gnReturnCode openglCreateBuffer(gnBufferHandle buffer, gnDevice device, gnBufferInfo info);
|
||||||
|
void openglBufferData(gnBufferHandle buffer, size_t dataSize, void* data);
|
||||||
|
void openglBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data);
|
||||||
|
void* openglMapBuffer(gnBufferHandle buffer);
|
||||||
|
void openglUnmapBuffer(gnBufferHandle buffer);
|
||||||
|
void openglDestroyBuffer(gnBufferHandle buffer);
|
Reference in New Issue
Block a user