Method: Vulkan::Queue#present

Defined in:
lib/vulkan/queue.rb

#present(swapchains:, image_indices:, wait_semaphores: []) ⇒ Object

Raises:

  • (ArgumentError)


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/vulkan/queue.rb', line 68

def present(swapchains:, image_indices:, wait_semaphores: [])
  raise ArgumentError, "swapchains and image_indices must have same sizes" unless swapchains.size == image_indices.size

  wait_semaphores_p = @wait_semaphores_buffers[wait_semaphores.size] ||= Fiddle::Pointer.malloc(wait_semaphores.size * Fiddle::SIZEOF_VOIDP)
  array_of_pointers(wait_semaphores, wait_semaphores_p)

  image_indices_p = @image_indices_buffers[image_indices.size] ||= Vulkan.struct(["uint32_t indices[#{image_indices.size}]"]).malloc
  data = image_indices.pack("I*")
  image_indices_p[0, data.size] = data

  swapchains_p = @swapchains_buffers[swapchains.size] ||= Fiddle::Pointer.malloc(swapchains.size * Fiddle::SIZEOF_VOIDP)
  array_of_pointers(swapchains, swapchains_p)

  @present_info.waitSemaphoreCount = wait_semaphores.size
  @present_info.pWaitSemaphores = wait_semaphores_p
  @present_info.swapchainCount = swapchains.size
  @present_info.pSwapchains = swapchains_p
  @present_info.pImageIndices = image_indices_p
  @present_info.pResults = nil
  check_result @vk.vkQueuePresentKHR(to_ptr, @present_info)
end