import vk/[ vk_core , vulkan , swapchain , graphics_pipeline , pipeline_record , buffer , vulkan_record , vulkan_frame ] , wain/[ waindow , waindow_object , keyboard , mouse , monitor , waindow_utils ] , times , glm , camera , utils/etc , os , math ,bitops , input/[ inputTys ] , strUtils , memory/[ utils ] import scene/[scene_controller , scene_record , main_scenes ] import std/tables when defined windows: import winim/lean when defined linux: import platforms/unix/x11/xcb proc main() = var the_waindow = a_waindow() vk_record = setup_vulkan(the_waindow[]) scene_record = a_scene_record( the_main_scene = Test_Area ) proc key_relay( the_waindow: var Waindow , key: WAIN_Key , action: int ) {.closure.} = if is_down WAIN_Key.Q: the_waindow.quit = true if key == WAIN_Key.F and action == ord Key_Action.Press: discard #the_waindow.toggle_full_screen if key == WAIN_Key.Escape and action == ord Key_Action.Press: the_waindow.quit = true proc mouse_key_relay( the_waindow: var Waindow , key: MouseButton , action: MouseBtnAction ){.closure.} = discard #echo action proc window_mapped_relay ( the_waindow: var Waindow , width: int , height: int ) {.closure.} = discard proc window_closed_relay ( the_waindow: var Waindow ) {.closure.} = the_waindow.quit = true proc window_resize_relay( the_waindow: var Waindow , width: int , height: int ) {.closure.} = # Simple fix for 1:1 pixel aspect ratio. # if vk_record.current_viewport.width > vk_record.current_viewport.height: # vk_record.current_viewport.x += 0.5 * (vk_record.current_viewport.width - vk_record.current_viewport.height) # vk_record.current_viewport.width = vk_record.current_viewport.height # elif vk_record.current_viewport.height > vk_record.current_viewport.width: # vk_record.current_viewport.y += 0.5f * (vk_record.current_viewport.height - vk_record.current_viewport.width); # vk_record.current_viewport.height = vk_record.current_viewport.width #window_resize( the_waindow, vk_record) #[ rebuild( vk_record.vk_device , vk_record.frame_buffers , scene_record.current_scene.render_pass , vk_record.swapchain , scene_record.current_scene.depth_stencil , vk_record.gpu.memory_properties ) ]# discard vkDeviceWaitIdle vk_record.vk_device vk_record.readyFrame = true set_key_relay( the_waindow[] , key_relay ) set_mouse_relay( the_waindow[] , mouse_key_relay ) set_window_resize_relay( the_waindow[] , window_resize_relay ) set_window_mapped_relay( the_waindow[], window_mapped_relay) set_window_closed_relay(the_waindow[], window_closed_relay) var dt = 0.0 updateLimit = 1.0 / 144.0 ft,t = 0.0 currTime = 0.0 frames = 0 updates = 0 accum = 0.0 nowTime = 0.0 cpuframeTimer: TimeInterval gpuframeTimer: TimeInterval lastFPS: float fps: string = "???" presentInfo = VkPresentInfoKHR( sType: VK_STRUCTURE_TYPE_PRESENT_INFO_KHR , pNext: nil , swapchainCount: 1 , pSwapchains: addr vk_record.swapchain.handle ) lastTime = cpuTime() timer = lastTime pipeline_record = Pipeline_Record() load( scene_record , vk_record ) while not the_waindow.quit: events the_waindow[] nowTime = cpuTime() dt += (nowTime - lastTime) / updateLimit lastTime = nowTime input(scene_record , vk_record ) while dt > 1.0: update( scene_record , vk_record , fps ) updates += 1 dt -= 1 draw( vk_record , scene_record , pipeline_record ) frames += 1 if cpuTime() - timer > 1.0: timer += 1 #fps = $frames & " | " & $updates # echo frames, " | ",updates updates = 0 frames = 0 #discard vkDeviceWaitIdle vk_record.vk_device main()