forked from MoonsideGames/Refresh
BindVertexBuffers and BindIndexBuffer
parent
47823c67ac
commit
7d2018e712
|
@ -1233,6 +1233,21 @@ REFRESHAPI void REFRESH_BindGraphicsPipeline(
|
|||
REFRESH_GraphicsPipeline *graphicsPipeline
|
||||
);
|
||||
|
||||
REFRESHAPI void REFRESH_BindVertexBuffers(
|
||||
REFRESH_Device *device,
|
||||
uint32_t firstBinding,
|
||||
uint32_t bindingCount,
|
||||
REFRESH_Buffer **pBuffers,
|
||||
uint64_t *pOffsets
|
||||
);
|
||||
|
||||
REFRESHAPI void REFRESH_BindIndexBuffer(
|
||||
REFRESH_Device *device,
|
||||
REFRESH_Buffer *buffer,
|
||||
uint64_t offset,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
);
|
||||
|
||||
/* Presentation */
|
||||
|
||||
REFRESHAPI void REFRESH_Present(
|
||||
|
|
|
@ -481,6 +481,21 @@ struct REFRESH_Device
|
|||
REFRESH_GraphicsPipeline *graphicsPipeline
|
||||
);
|
||||
|
||||
void(*BindVertexBuffers)(
|
||||
REFRESH_Renderer *driverData,
|
||||
uint32_t firstBinding,
|
||||
uint32_t bindingCount,
|
||||
REFRESH_Buffer **pBuffers,
|
||||
uint64_t *pOffsets
|
||||
);
|
||||
|
||||
void(*BindIndexBuffer)(
|
||||
REFRESH_Renderer *driverData,
|
||||
REFRESH_Buffer *buffer,
|
||||
uint64_t offset,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
);
|
||||
|
||||
void(*Present)(
|
||||
REFRESH_Renderer *driverData,
|
||||
REFRESH_Rect *sourceRectangle,
|
||||
|
@ -536,6 +551,8 @@ struct REFRESH_Device
|
|||
ASSIGN_DRIVER_FUNC(BeginRenderPass, name) \
|
||||
ASSIGN_DRIVER_FUNC(EndRenderPass, name) \
|
||||
ASSIGN_DRIVER_FUNC(BindGraphicsPipeline, name) \
|
||||
ASSIGN_DRIVER_FUNC(BindVertexBuffers, name) \
|
||||
ASSIGN_DRIVER_FUNC(BindIndexBuffer, name) \
|
||||
ASSIGN_DRIVER_FUNC(Present, name)
|
||||
|
||||
typedef struct REFRESH_Driver
|
||||
|
|
|
@ -183,6 +183,12 @@ static VkFormat RefreshToVK_VertexFormat[] =
|
|||
VK_FORMAT_R16G16B16A16_SFLOAT /* HALFVECTOR4 */
|
||||
};
|
||||
|
||||
static VkIndexType RefreshToVK_IndexType[] =
|
||||
{
|
||||
VK_INDEX_TYPE_UINT16,
|
||||
VK_INDEX_TYPE_UINT32
|
||||
};
|
||||
|
||||
static VkPrimitiveTopology RefreshToVK_PrimitiveType[] =
|
||||
{
|
||||
VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
|
||||
|
@ -3887,6 +3893,51 @@ static void VULKAN_BindGraphicsPipeline(
|
|||
SDL_assert(0);
|
||||
}
|
||||
|
||||
static void VULKAN_BindVertexBuffers(
|
||||
REFRESH_Renderer *driverData,
|
||||
uint32_t firstBinding,
|
||||
uint32_t bindingCount,
|
||||
REFRESH_Buffer **pBuffers,
|
||||
uint64_t *pOffsets
|
||||
) {
|
||||
VkBuffer *buffers = SDL_stack_alloc(VkBuffer, bindingCount);
|
||||
VulkanBuffer* currentBuffer;
|
||||
VulkanRenderer* renderer = (VulkanRenderer*) driverData;
|
||||
|
||||
for (int i = 0; i < bindingCount; i += 1)
|
||||
{
|
||||
currentBuffer = (VulkanBuffer*) pBuffers[i];
|
||||
buffers[i] = currentBuffer->subBuffers[currentBuffer->currentSubBufferIndex]->buffer;
|
||||
}
|
||||
|
||||
RECORD_CMD(renderer->vkCmdBindVertexBuffers(
|
||||
renderer->currentCommandBuffer,
|
||||
firstBinding,
|
||||
bindingCount,
|
||||
buffers,
|
||||
pOffsets
|
||||
));
|
||||
|
||||
SDL_stack_free(buffers);
|
||||
}
|
||||
|
||||
static void VULKAN_BindIndexBuffer(
|
||||
REFRESH_Renderer *driverData,
|
||||
REFRESH_Buffer *buffer,
|
||||
uint64_t offset,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
) {
|
||||
VulkanRenderer* renderer = (VulkanRenderer*) driverData;
|
||||
VulkanBuffer* vulkanBuffer = (VulkanBuffer*) buffer;
|
||||
|
||||
RECORD_CMD(renderer->vkCmdBindIndexBuffer(
|
||||
renderer->currentCommandBuffer,
|
||||
vulkanBuffer->subBuffers[vulkanBuffer->currentSubBufferIndex]->buffer,
|
||||
offset,
|
||||
RefreshToVK_IndexType[indexElementSize]
|
||||
));
|
||||
}
|
||||
|
||||
static void VULKAN_Present(
|
||||
REFRESH_Renderer *driverData,
|
||||
REFRESH_Rect *sourceRectangle,
|
||||
|
|
Loading…
Reference in New Issue