Mercurial > games > semicongine
comparison semiconginev2/rendering.nim @ 1239:69489a678141
add: better syncing, better swapchain access, correct font offset, two font-rendering tests
| author | sam <sam@basx.dev> |
|---|---|
| date | Mon, 22 Jul 2024 00:46:10 +0700 |
| parents | 841e12f33c47 |
| children | 42eeb59f3a43 |
comparison
equal
deleted
inserted
replaced
| 1238:03634915bbdb | 1239:69489a678141 |
|---|---|
| 40 surface: VkSurfaceKHR | 40 surface: VkSurfaceKHR |
| 41 window: NativeWindow | 41 window: NativeWindow |
| 42 graphicsQueueFamily*: uint32 | 42 graphicsQueueFamily*: uint32 |
| 43 graphicsQueue*: VkQueue | 43 graphicsQueue*: VkQueue |
| 44 debugMessenger: VkDebugUtilsMessengerEXT | 44 debugMessenger: VkDebugUtilsMessengerEXT |
| 45 # populated through the InitSwapchain proc | |
| 46 swapchain*: Swapchain | |
| 45 # unclear as of yet | 47 # unclear as of yet |
| 46 anisotropy*: float32 = 0 # needs to be enable during device creation | 48 anisotropy*: float32 = 0 # needs to be enable during device creation |
| 47 Renderpass* = ref object | 49 Renderpass* = ref object |
| 48 vk*: VkRenderPass | 50 vk*: VkRenderPass |
| 49 samples*: VkSampleCountFlagBits | 51 samples*: VkSampleCountFlagBits |
| 77 oldSwapchain: Swapchain | 79 oldSwapchain: Swapchain |
| 78 oldSwapchainCounter: int # swaps until old swapchain will be destroyed | 80 oldSwapchainCounter: int # swaps until old swapchain will be destroyed |
| 79 | 81 |
| 80 var vulkan*: VulkanGlobals | 82 var vulkan*: VulkanGlobals |
| 81 var fullscreen: bool | 83 var fullscreen: bool |
| 82 | |
| 83 func currentFiF*(swapchain: Swapchain): int = swapchain.currentFiF | |
| 84 | 84 |
| 85 type | 85 type |
| 86 # type aliases | 86 # type aliases |
| 87 SupportedGPUType = float32 | float64 | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | TVec2[int32] | TVec2[int64] | TVec3[int32] | TVec3[int64] | TVec4[int32] | TVec4[int64] | TVec2[uint32] | TVec2[uint64] | TVec3[uint32] | TVec3[uint64] | TVec4[uint32] | TVec4[uint64] | TVec2[float32] | TVec2[float64] | TVec3[float32] | TVec3[float64] | TVec4[float32] | TVec4[float64] | TMat2[float32] | TMat2[float64] | TMat23[float32] | TMat23[float64] | TMat32[float32] | TMat32[float64] | TMat3[float32] | TMat3[float64] | TMat34[float32] | TMat34[float64] | TMat43[float32] | TMat43[float64] | TMat4[float32] | TMat4[float64] | 87 SupportedGPUType = float32 | float64 | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | TVec2[int32] | TVec2[int64] | TVec3[int32] | TVec3[int64] | TVec4[int32] | TVec4[int64] | TVec2[uint32] | TVec2[uint64] | TVec3[uint32] | TVec3[uint64] | TVec4[uint32] | TVec4[uint64] | TVec2[float32] | TVec2[float64] | TVec3[float32] | TVec3[float64] | TVec4[float32] | TVec4[float64] | TMat2[float32] | TMat2[float64] | TMat23[float32] | TMat23[float64] | TMat32[float32] | TMat32[float64] | TMat3[float32] | TMat3[float64] | TMat34[float32] | TMat34[float64] | TMat43[float32] | TMat43[float64] | TMat4[float32] | TMat4[float64] |
| 88 Gray = TVec1[uint8] | 88 Gray = TVec1[uint8] |
| 318 pAllocator = nil, | 318 pAllocator = nil, |
| 319 pDevice = addr vulkan.device | 319 pDevice = addr vulkan.device |
| 320 ) | 320 ) |
| 321 vulkan.graphicsQueue = svkGetDeviceQueue(vulkan.device, vulkan.graphicsQueueFamily, VK_QUEUE_GRAPHICS_BIT) | 321 vulkan.graphicsQueue = svkGetDeviceQueue(vulkan.device, vulkan.graphicsQueueFamily, VK_QUEUE_GRAPHICS_BIT) |
| 322 | 322 |
| 323 proc ClearSwapchain*() = | |
| 324 assert vulkan.swapchain != nil, "Swapchain has not been initialized yet" | |
| 325 DestroySwapchain(vulkan.swapchain) | |
| 326 vulkan.swapchain = nil | |
| 327 | |
| 328 proc SetupSwapchain*(renderPass: RenderPass, vSync: bool = false) = | |
| 329 assert vulkan.swapchain == nil, "Swapchain has already been initialized yet" | |
| 330 vulkan.swapchain = InitSwapchain(renderPass, vSync = vSync) | |
| 331 | |
| 323 proc DestroyVulkan*() = | 332 proc DestroyVulkan*() = |
| 333 if vulkan.swapchain != nil: | |
| 334 DestroySwapchain(vulkan.swapchain) | |
| 324 vkDestroyDevice(vulkan.device, nil) | 335 vkDestroyDevice(vulkan.device, nil) |
| 325 vkDestroySurfaceKHR(vulkan.instance, vulkan.surface, nil) | 336 vkDestroySurfaceKHR(vulkan.instance, vulkan.surface, nil) |
| 326 vkDestroyDebugUtilsMessengerEXT(vulkan.instance, vulkan.debugMessenger, nil) | 337 vkDestroyDebugUtilsMessengerEXT(vulkan.instance, vulkan.debugMessenger, nil) |
| 327 vkDestroyInstance(vulkan.instance, nil) | 338 vkDestroyInstance(vulkan.instance, nil) |
| 328 | 339 |
| 332 proc `Fullscreen=`*(enable: bool) = | 343 proc `Fullscreen=`*(enable: bool) = |
| 333 if enable != fullscreen: | 344 if enable != fullscreen: |
| 334 fullscreen = enable | 345 fullscreen = enable |
| 335 vulkan.window.Fullscreen(fullscreen) | 346 vulkan.window.Fullscreen(fullscreen) |
| 336 | 347 |
| 337 func GetAspectRatio*(swapchain: Swapchain): float32 = swapchain.width.float32 / swapchain.height.float32 | 348 proc GetAspectRatio*(): float32 = |
| 349 assert vulkan.swapchain != nil, "Swapchain has not been initialized yet" | |
| 350 vulkan.swapchain.width.float32 / vulkan.swapchain.height.float32 | |
| 351 | |
| 352 proc currentFiF*(): int = | |
| 353 assert vulkan.swapchain != nil, "Swapchain has not been initialized yet" | |
| 354 vulkan.swapchain.currentFiF | |
| 338 | 355 |
| 339 proc MaxFramebufferSampleCount*(maxSamples = VK_SAMPLE_COUNT_8_BIT): VkSampleCountFlagBits = | 356 proc MaxFramebufferSampleCount*(maxSamples = VK_SAMPLE_COUNT_8_BIT): VkSampleCountFlagBits = |
| 340 let limits = svkGetPhysicalDeviceProperties().limits | 357 let limits = svkGetPhysicalDeviceProperties().limits |
| 341 let available = VkSampleCountFlags( | 358 let available = VkSampleCountFlags( |
| 342 limits.framebufferColorSampleCounts.uint32 and limits.framebufferDepthSampleCounts.uint32 | 359 limits.framebufferColorSampleCounts.uint32 and limits.framebufferDepthSampleCounts.uint32 |
