diff --git a/src/core/buffers/gryphn_buffer.c b/src/core/buffers/gryphn_buffer.c index dce940b..ce44d7e 100644 --- a/src/core/buffers/gryphn_buffer.c +++ b/src/core/buffers/gryphn_buffer.c @@ -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); } diff --git a/src/core/buffers/gryphn_buffer.h b/src/core/buffers/gryphn_buffer.h index e0bc2f4..b1153c1 100644 --- a/src/core/buffers/gryphn_buffer.h +++ b/src/core/buffers/gryphn_buffer.h @@ -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); diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index a2919e1..b5b8029 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -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); diff --git a/src/core/instance/init/gryphn_init.c b/src/core/instance/init/gryphn_init.c index 70bbf0f..5585d3d 100644 --- a/src/core/instance/init/gryphn_init.c +++ b/src/core/instance/init/gryphn_init.c @@ -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");