gryphn map buffers

This commit is contained in:
Greg Wells
2025-06-07 17:18:59 -04:00
parent 813760678b
commit 70cbb6a0ec
4 changed files with 14 additions and 0 deletions

View File

@@ -5,11 +5,21 @@
gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info) {
*buffer = malloc(sizeof(struct gnBuffer_t));
(*buffer)->device = device;
(*buffer)->info = info;
return device->deviceFunctions->_gnCreateBuffer(*buffer, device, info);
}
void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
buffer->device->deviceFunctions->_gnBufferData(buffer, dataSize, data);
}
void* gnMapBuffer(gnBufferHandle buffer) {
if (buffer->info.type == GN_STATIC_DRAW) {
gnDebuggerSetErrorMessage(buffer->device->instance->debugger, (gnMessageData){
.message = gnCreateString("Cannot map static draw buffers")
});
return NULL;
}
return buffer->device->deviceFunctions->_gnMapBuffer(buffer);
}
void gnDestroyBuffer(gnBufferHandle buffer) {
buffer->device->deviceFunctions->_gnDestroyBuffer(buffer);
}

View File

@@ -26,9 +26,11 @@ typedef struct gnBufferInfo {
struct gnBuffer_t {
struct gnPlatformBuffer_t* buffer;
gnDeviceHandle device;
gnBufferInfo info;
};
#endif
gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info);
void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data);
void* gnMapBuffer(gnBufferHandle buffer);
void gnDestroyBuffer(gnBufferHandle buffer);

View File

@@ -84,6 +84,7 @@ typedef struct gnDeviceFunctions_t {
gnReturnCode (*_gnCreateBuffer)(gnBufferHandle buffer, gnDeviceHandle device, gnBufferInfo info);
void (*_gnBufferData)(gnBufferHandle buffer, size_t size, void* data);
void* (*_gnMapBuffer)(gnBufferHandle buffer);
void (*_gnDestroyBuffer)(gnBufferHandle buffer);
gnReturnCode (*_gnCreateFence)(gnFenceHandle fence, gnOutputDeviceHandle device);

View File

@@ -86,6 +86,7 @@ void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFuncti
gnLoadDLLFunction(lib, functions->_gnDestroySemaphore, "gnDestroySemaphoreFn");
gnLoadDLLFunction(lib, functions->_gnCreateBuffer, "gnCreateBufferFn");
gnLoadDLLFunction(lib, functions->_gnBufferData, "gnBufferDataFn");
gnLoadDLLFunction(lib, functions->_gnMapBuffer, "gnMapBufferFn");
gnLoadDLLFunction(lib, functions->_gnDestroyBuffer, "gnDestroyBufferFn");
gnLoadDLLFunction(lib, functions->_gnCreateFence, "gnCreateFenceFn");
gnLoadDLLFunction(lib, functions->_gnSignalFence, "gnSignalFenceFn");