diff --git a/rendering_api/vulkan/src/buffers/vulkan_buffer.c b/rendering_api/vulkan/src/buffers/vulkan_buffer.c index 12d2fe1..14aef30 100644 --- a/rendering_api/vulkan/src/buffers/vulkan_buffer.c +++ b/rendering_api/vulkan/src/buffers/vulkan_buffer.c @@ -49,6 +49,12 @@ gnReturnCode gnCreateBufferFn(gnBufferHandle buffer, gnOutputDeviceHandle device vkBindBufferMemory(device->outputDevice->device, buffer->buffer->buffer, buffer->buffer->bufferMemory, 0); return GN_SUCCESS; } +void gnBufferDataFn(gnBufferHandle buffer, size_t dataSize, void* data) { + void* bufferData; + vkMapMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory, 0, dataSize, 0, &bufferData); + memcpy(bufferData, data, dataSize); + vkUnmapMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory); +} void gnDestroyBufferFn(gnBufferHandle buffer) { vkDestroyBuffer(buffer->device->outputDevice->device, buffer->buffer->buffer, NULL); vkFreeMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory, NULL); diff --git a/rendering_api/vulkan/src/commands/commands/vulkan_commands.c b/rendering_api/vulkan/src/commands/commands/vulkan_commands.c index 82c1753..86b93fe 100644 --- a/rendering_api/vulkan/src/commands/commands/vulkan_commands.c +++ b/rendering_api/vulkan/src/commands/commands/vulkan_commands.c @@ -4,6 +4,7 @@ #include "framebuffers/vulkan_framebuffer.h" #include "commands/command_buffer/vulkan_command_buffer.h" #include "pipelines/graphics_pipeline/vulkan_graphics_pipeline.h" +#include "buffers/vulkan_buffer.h" void gnCommandBeginRenderPassFn(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo) { VkClearValue* values = malloc(sizeof(VkClearValue) * passInfo.clearValueCount); @@ -54,6 +55,11 @@ void gnCommandSetScissorFn(struct gnCommandBuffer_t* buffer, struct gnScissor_t }; vkCmdSetScissor(buffer->commandBuffer->buffer, 0, 1, &vkScissor); } +VkDeviceSize offsets[] = {0}; +void gnCommandBindBufferFn(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) { + if (type == GN_VERTEX_BUFFER) + vkCmdBindVertexBuffers(buffer->commandBuffer->buffer, 0, 1, &bufferToBind->buffer->buffer, offsets); +} void gnCommandDrawFn(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { vkCmdDraw(buffer->commandBuffer->buffer, vertexCount, instanceCount, firstVertex, firstInstance); } diff --git a/src/core/buffers/gryphn_buffer.c b/src/core/buffers/gryphn_buffer.c index b29a8c2..dce940b 100644 --- a/src/core/buffers/gryphn_buffer.c +++ b/src/core/buffers/gryphn_buffer.c @@ -7,6 +7,9 @@ gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, (*buffer)->device = device; return device->deviceFunctions->_gnCreateBuffer(*buffer, device, info); } +void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data) { + buffer->device->deviceFunctions->_gnBufferData(buffer, dataSize, data); +} 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 f9ab54a..8f6d7e1 100644 --- a/src/core/buffers/gryphn_buffer.h +++ b/src/core/buffers/gryphn_buffer.h @@ -20,4 +20,5 @@ struct gnBuffer_t { #endif gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info); +void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data); void gnDestroyBuffer(gnBufferHandle buffer); diff --git a/src/core/command/commands/gryphn_command.c b/src/core/command/commands/gryphn_command.c index b0bdb9c..40e195e 100644 --- a/src/core/command/commands/gryphn_command.c +++ b/src/core/command/commands/gryphn_command.c @@ -17,7 +17,9 @@ void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) { buffer->commandPool->commandFunctions->_gnCommandSetScissor(buffer, scissor); } - +void gnCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) { + buffer->commandPool->commandFunctions->_gnCommandBindBuffer(buffer, bufferToBind, type); +} void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { buffer->commandPool->commandFunctions->_gnCommandDraw(buffer, vertexCount, firstVertex, instanceCount, firstInstance); } diff --git a/src/core/command/commands/gryphn_command.h b/src/core/command/commands/gryphn_command.h index baa1ada..b2d0c76 100644 --- a/src/core/command/commands/gryphn_command.h +++ b/src/core/command/commands/gryphn_command.h @@ -1,13 +1,15 @@ -#include "core/command/command_buffer/gryphn_command_buffer.h" - +#include "core/gryphn_handles.h" #include "core/renderpass/gryphn_render_pass.h" -void gnCommandBeginRenderPass(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo); -void gnCommandEndRenderPass(struct gnCommandBuffer_t* buffer); +void gnCommandBeginRenderPass(gnCommandBufferHandle buffer, gnRenderPassInfo passInfo); +void gnCommandEndRenderPass(gnCommandBufferHandle buffer); #include "core/pipelines/graphics_pipeline/gryphn_graphics_pipeline.h" -void gnCommandBindGraphicsPipeline(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline); -void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport); -void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor); +void gnCommandBindGraphicsPipeline(gnCommandBufferHandle buffer, gnGraphicsPipelineHandle graphicsPipeline); +void gnCommandSetViewport(gnCommandBufferHandle buffer, gnViewport viewport); +void gnCommandSetScissor(gnCommandBufferHandle buffer, gnScissor scissor); -void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); +#include "core/buffers/gryphn_buffer.h" +void gnCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); + +void gnCommandDraw(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index 659a976..e965884 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -83,7 +83,8 @@ typedef struct gnDeviceFunctions_t { void (*_gnDestroySemaphore)(gnSemaphoreHandle semaphore); gnReturnCode (*_gnCreateBuffer)(gnBufferHandle buffer, gnDeviceHandle device, gnBufferInfo info); - gnReturnCode(*_gnDestroyBuffer)(gnBufferHandle buffer); + void (*_gnBufferData)(gnBufferHandle buffer, size_t size, void* data); + void (*_gnDestroyBuffer)(gnBufferHandle buffer); gnReturnCode (*_gnCreateFence)(gnFenceHandle fence, gnOutputDeviceHandle device); void (*_gnSignalFence)(gnFenceHandle fence); @@ -110,5 +111,6 @@ typedef struct gnCommandFunctions_t { void (*_gnCommandSetViewport)(gnCommandBufferHandle buffer, gnViewport viewport); void (*_gnCommandSetScissor)(gnCommandBufferHandle buffer, gnScissor scissor); + void (*_gnCommandBindBuffer)(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); void (*_gnCommandDraw)(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); } gnCommandFunctions; diff --git a/src/core/instance/init/gryphn_init.c b/src/core/instance/init/gryphn_init.c index ebad1f5..c010ab6 100644 --- a/src/core/instance/init/gryphn_init.c +++ b/src/core/instance/init/gryphn_init.c @@ -85,6 +85,7 @@ void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFuncti gnLoadDLLFunction(lib, functions->_gnCreateSemaphore, "gnCreateSemaphoreFn"); gnLoadDLLFunction(lib, functions->_gnDestroySemaphore, "gnDestroySemaphoreFn"); gnLoadDLLFunction(lib, functions->_gnCreateBuffer, "gnCreateBufferFn"); + gnLoadDLLFunction(lib, functions->_gnBufferData, "gnBufferDataFn"); gnLoadDLLFunction(lib, functions->_gnDestroyBuffer, "gnDestroyBufferFn"); gnLoadDLLFunction(lib, functions->_gnCreateFence, "gnCreateFenceFn"); gnLoadDLLFunction(lib, functions->_gnSignalFence, "gnSignalFenceFn"); @@ -106,5 +107,6 @@ void gnLoadCommandFunctions(struct gnDynamicLibrary_t* lib, struct gnCommandFunc gnLoadDLLFunction(lib, functions->_gnCommandBindGraphicsPipeline, "gnCommandBindGraphicsPipelineFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetViewport, "gnCommandSetViewportFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetScissor, "gnCommandSetScissorFn"); + gnLoadDLLFunction(lib, functions->_gnCommandBindBuffer, "gnCommandBindBufferFn"); gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDrawFn"); }