1 object Vulkan 2 def create (instance : Instance 3 command_buffer : CommandBuffer 4 buffer_pool : BufferPool 5 sampler : VkSampler 6 swapchain : Swapchain 7 get_shader : GetShader 8 image_changed : obs/Stream<String>) = 9 let sync = Sync.create swapchain.image_count 10 let render_pass_cache = RenderPassCache.new 11 let resolve = 12 let shader = get_shader Shader.resolve_depth as ComputeShader 13 Resolve.create shader 14 15 let tonemap = 16 let vertex_shader = get_shader Shader.tonemap_vertex as VertexShader 17 let fragment_shader = get_shader Shader.tonemap_fragment as FragmentShader 18 Tonemap.create vertex_shader fragment_shader 19 20 let blit = 21 let vertex_shader = get_shader Shader.blit_vertex as VertexShader 22 let fragment_shader = get_shader Shader.blit_fragment as FragmentShader 23 Blit.create render_pass_cache swapchain.format vertex_shader 24 fragment_shader 25 26 let depth_shader = 27 let vertex_shader = get_shader Shader.depth_vertex as VertexShader 28 let fragment_shader = get_shader Shader.depth_fragment as FragmentShader 29 (vertex_shader, fragment_shader) 30 31 let depth_skinned_shader = 32 let vertex_shader = get_shader Shader.depth_skinned_vertex as VertexShader 33 let fragment_shader = get_shader Shader.depth_fragment as FragmentShader 34 (vertex_shader, fragment_shader) 35 36 let quad_index_buffer = 37 let buffer = IndexBuffer.create 38 buffer.ensure_size (6 * 4) 39 update [0, 1, 2, 0, 2, 3] BarrierFlags@all 40 41 buffer 42 43 let vulkan = Vulkan =sync =instance =buffer_pool =command_buffer =swapchain 44 =sampler =quad_index_buffer =render_pass_cache 45 descriptor_pool_cache = DescriptorPoolCache instance 46 =resolve =tonemap =blit =depth_shader 47 =depth_skinned_shader =get_shader 48 49 vulkan.token = image_changed.subscribe { path -> 50 let maybe_materials = vulkan.material_images.try_get_back path 51 if maybe_materials ? Some materials then 52 for material in materials do 53 material.descriptor_set = null } 54 55 vulkan 56 57 end@ vulkan 58