Opaque Buffer;

This commit is contained in:
bjorn 2020-02-22 21:43:36 -08:00
parent 5d8bf1d45a
commit b045d42782
4 changed files with 30 additions and 34 deletions

View File

@ -1,13 +0,0 @@
#include "graphics/buffer.h"
size_t lovrBufferGetSize(Buffer* buffer) {
return buffer->size;
}
bool lovrBufferIsReadable(Buffer* buffer) {
return buffer->readable;
}
BufferUsage lovrBufferGetUsage(Buffer* buffer) {
return buffer->usage;
}

View File

@ -1,6 +1,5 @@
#include "graphics/opengl.h"
#include <stddef.h>
#include <stdbool.h>
#include <stddef.h>
#pragma once
@ -19,20 +18,8 @@ typedef enum {
USAGE_STREAM
} BufferUsage;
typedef struct Buffer {
void* data;
size_t size;
size_t flushFrom;
size_t flushTo;
BufferType type;
BufferUsage usage;
bool mapped;
bool readable;
GPU_BUFFER_FIELDS
} Buffer;
Buffer* lovrBufferInit(Buffer* buffer, size_t size, void* data, BufferType type, BufferUsage usage, bool readable);
#define lovrBufferCreate(...) lovrBufferInit(lovrAlloc(Buffer), __VA_ARGS__)
typedef struct Buffer Buffer;
Buffer* lovrBufferCreate(size_t size, void* data, BufferType type, BufferUsage usage, bool readable);
void lovrBufferDestroy(void* ref);
size_t lovrBufferGetSize(Buffer* buffer);
bool lovrBufferIsReadable(Buffer* buffer);

View File

@ -31,6 +31,19 @@
#define LOVR_SHADER_BONE_WEIGHTS 6
#define LOVR_SHADER_DRAW_ID 7
struct Buffer {
uint32_t id;
void* data;
size_t size;
size_t flushFrom;
size_t flushTo;
BufferType type;
BufferUsage usage;
bool mapped;
bool readable;
uint8_t incoherent;
};
typedef enum {
BARRIER_BLOCK,
BARRIER_UNIFORM_TEXTURE,
@ -1830,7 +1843,8 @@ TextureData* lovrCanvasNewTextureData(Canvas* canvas, uint32_t index) {
// Buffer
Buffer* lovrBufferInit(Buffer* buffer, size_t size, void* data, BufferType type, BufferUsage usage, bool readable) {
Buffer* lovrBufferCreate(size_t size, void* data, BufferType type, BufferUsage usage, bool readable) {
Buffer* buffer = lovrAlloc(Buffer);
state.stats.bufferCount++;
state.stats.bufferMemory += size;
buffer->size = size;
@ -1873,6 +1887,18 @@ void lovrBufferDestroy(void* ref) {
state.stats.bufferCount--;
}
size_t lovrBufferGetSize(Buffer* buffer) {
return buffer->size;
}
bool lovrBufferIsReadable(Buffer* buffer) {
return buffer->readable;
}
BufferUsage lovrBufferGetUsage(Buffer* buffer) {
return buffer->usage;
}
void* lovrBufferMap(Buffer* buffer, size_t offset) {
#ifndef LOVR_WEBGL
if (!GLAD_GL_ARB_buffer_storage && !buffer->mapped) {

View File

@ -11,10 +11,6 @@
#pragma once
#define GPU_BUFFER_FIELDS \
uint8_t incoherent; \
uint32_t id;
#define GPU_CANVAS_FIELDS \
bool immortal; \
uint32_t framebuffer; \