From 8a7801976eea99b0972907ebb0fd5a9f867ebfd5 Mon Sep 17 00:00:00 2001 From: Matthew Russo Date: Mon, 4 Feb 2019 22:51:33 -0500 Subject: [PATCH] adds 23_images and formatted statue jpeg --- README.md | 10 +- src/bin/23_images.rs | 809 ++++++++++++++++++++++++++++++++++++++ src/bin/23_images.rs.diff | 96 +++++ src/bin/23_statue.jpg | Bin 0 -> 93643 bytes 4 files changed, 914 insertions(+), 1 deletion(-) create mode 100644 src/bin/23_images.rs create mode 100644 src/bin/23_images.rs.diff create mode 100644 src/bin/23_statue.jpg diff --git a/README.md b/README.md index 5e28d2e..a7b91bd 100644 --- a/README.md +++ b/README.md @@ -368,7 +368,15 @@ Note that due to the flipping of the Y axis in the projection matrix, we now nee the opposite direction. [Diff](src/bin/22_descriptor_pools_and_sets.rs.diff) / [Complete code](src/bin/22_descriptor_pools_and_sets.rs) -## Texture mapping (*TODO*) +## Texture mapping +### Images +https://vulkan-tutorial.com/Texture_mapping/Images + +This section is much simpler than the C++ counterpart due to the image library we use and Vulkano's internal +representation of images. The image library handles converting the image to a buffer in the right format, and then all we +need to do is pass this buffer into the appropriate constructor. + +[Diff](src/bin/23_images.rs.diff) / [Complete code](src/bin/23_images.rs) ## Depth buffering (*TODO*) ## Loading models (*TODO*) ## Generating Mipmaps (*TODO*) diff --git a/src/bin/23_images.rs b/src/bin/23_images.rs new file mode 100644 index 0000000..b2d3eb9 --- /dev/null +++ b/src/bin/23_images.rs @@ -0,0 +1,809 @@ +#[macro_use] +extern crate vulkano; +extern crate vulkano_win; +extern crate winit; +extern crate image; + +use std::sync::{Arc, Mutex}; +use std::collections::HashSet; +use std::time::Instant; + +use winit::{EventsLoop, WindowBuilder, Window, dpi::LogicalSize, Event, WindowEvent}; +use vulkano_win::VkSurfaceBuild; + +use vulkano::instance::{ + Instance, + InstanceExtensions, + ApplicationInfo, + Version, + layers_list, + PhysicalDevice, +}; +use vulkano::instance::debug::{DebugCallback, MessageTypes}; +use vulkano::device::{Device, DeviceExtensions, Queue, Features}; +use vulkano::swapchain::{ + Surface, + Capabilities, + ColorSpace, + SupportedPresentModes, + PresentMode, + Swapchain, + CompositeAlpha, + acquire_next_image, + AcquireError, +}; +use vulkano::format::Format; +use vulkano::image::{ + ImageUsage, + swapchain::SwapchainImage, + ImmutableImage, + Dimensions +}; +use vulkano::sync::{self, SharingMode, GpuFuture}; +use vulkano::pipeline::{ + GraphicsPipeline, + GraphicsPipelineAbstract, + viewport::Viewport, +}; +use vulkano::framebuffer::{ + RenderPassAbstract, + Subpass, + FramebufferAbstract, + Framebuffer, +}; +use vulkano::command_buffer::{ + AutoCommandBuffer, + AutoCommandBufferBuilder, + DynamicState, +}; +use vulkano::buffer::{ + immutable::ImmutableBuffer, + BufferUsage, + BufferAccess, + TypedBufferAccess, + CpuAccessibleBuffer +}; +use vulkano::descriptor::descriptor_set::{ + FixedSizeDescriptorSetsPool, + FixedSizeDescriptorSet +}; + +use image::GenericImageView; + +const WIDTH: u32 = 800; +const HEIGHT: u32 = 600; + +const VALIDATION_LAYERS: &[&str] = &[ + "VK_LAYER_LUNARG_standard_validation" +]; + +const TEXTURE_PATH: &'static str = "src/bin/23_statue.jpg"; + +/// Required device extensions +fn device_extensions() -> DeviceExtensions { + DeviceExtensions { + khr_swapchain: true, + .. vulkano::device::DeviceExtensions::none() + } +} + +#[cfg(all(debug_assertions))] +const ENABLE_VALIDATION_LAYERS: bool = true; +#[cfg(not(debug_assertions))] +const ENABLE_VALIDATION_LAYERS: bool = false; + +struct QueueFamilyIndices { + graphics_family: i32, + present_family: i32, +} +impl QueueFamilyIndices { + fn new() -> Self { + Self { graphics_family: -1, present_family: -1 } + } + + fn is_complete(&self) -> bool { + self.graphics_family >= 0 && self.present_family >= 0 + } +} + +#[derive(Copy, Clone)] +struct Vertex { + pos: [f32; 2], + color: [f32; 3], +} +impl Vertex { + fn new(pos: [f32; 2], color: [f32; 3]) -> Self { + Self { pos, color } + } +} +impl_vertex!(Vertex, pos, color); + +#[derive(Copy, Clone)] +struct UniformBufferObject { + model: glm::Mat4, + view: glm::Mat4, + proj: glm::Mat4, +} + +fn vertices() -> [Vertex; 4] { + [ + Vertex::new([-0.5, -0.5], [1.0, 0.0, 0.0]), + Vertex::new([0.5, -0.5], [0.0, 1.0, 0.0]), + Vertex::new([0.5, 0.5], [0.0, 0.0, 1.0]), + Vertex::new([-0.5, 0.5], [1.0, 1.0, 1.0]) + ] +} + +fn indices() -> [u16; 6] { + [0, 1, 2, 2, 3, 0] +} + +struct HelloTriangleApplication { + instance: Arc, + #[allow(unused)] + debug_callback: Option, + + events_loop: EventsLoop, + surface: Arc>, + + physical_device_index: usize, // can't store PhysicalDevice directly (lifetime issues) + device: Arc, + + graphics_queue: Arc, + present_queue: Arc, + + swap_chain: Arc>, + swap_chain_images: Vec>>, + + render_pass: Arc, + graphics_pipeline: Arc, + + swap_chain_framebuffers: Vec>, + + texture_image: Arc>, + + vertex_buffer: Arc, + index_buffer: Arc + Send + Sync>, + uniform_buffers: Vec>>, + + descriptor_sets: Vec, ((), vulkano::descriptor::descriptor_set::PersistentDescriptorSetBuf>>)>>>, + + command_buffers: Vec>, + + previous_frame_end: Option>, + recreate_swap_chain: bool, + + start_time: Instant, +} + +impl HelloTriangleApplication { + pub fn initialize() -> Self { + let instance = Self::create_instance(); + let debug_callback = Self::setup_debug_callback(&instance); + let (events_loop, surface) = Self::create_surface(&instance); + + let physical_device_index = Self::pick_physical_device(&instance, &surface); + let (device, graphics_queue, present_queue) = Self::create_logical_device( + &instance, &surface, physical_device_index); + + let (swap_chain, swap_chain_images) = Self::create_swap_chain(&instance, &surface, physical_device_index, + &device, &graphics_queue, &present_queue, None); + + let render_pass = Self::create_render_pass(&device, swap_chain.format()); + + let graphics_pipeline = Self::create_graphics_pipeline(&device, swap_chain.dimensions(), &render_pass); + + let swap_chain_framebuffers = Self::create_framebuffers(&swap_chain_images, &render_pass); + + let start_time = Instant::now(); + + let texture_image = Self::create_texture_image(&graphics_queue); + + let vertex_buffer = Self::create_vertex_buffer(&graphics_queue); + let index_buffer = Self::create_index_buffer(&graphics_queue); + let uniform_buffers = Self::create_uniform_buffers(&device, swap_chain_images.len(), start_time, swap_chain.dimensions()); + + let descriptor_sets_pool = Self::create_descriptor_pool(&graphics_pipeline); + let descriptor_sets = Self::create_descriptor_sets(&descriptor_sets_pool, &uniform_buffers); + + let previous_frame_end = Some(Self::create_sync_objects(&device)); + + let mut app = Self { + instance, + debug_callback, + + events_loop, + surface, + + physical_device_index, + device, + + graphics_queue, + present_queue, + + swap_chain, + swap_chain_images, + + render_pass, + graphics_pipeline, + + swap_chain_framebuffers, + + texture_image, + + vertex_buffer, + index_buffer, + uniform_buffers, + + descriptor_sets, + + command_buffers: vec![], + + previous_frame_end, + recreate_swap_chain: false, + + start_time + }; + + app.create_command_buffers(); + app + } + + fn create_instance() -> Arc { + if ENABLE_VALIDATION_LAYERS && !Self::check_validation_layer_support() { + println!("Validation layers requested, but not available!") + } + + let supported_extensions = InstanceExtensions::supported_by_core() + .expect("failed to retrieve supported extensions"); + println!("Supported extensions: {:?}", supported_extensions); + + let app_info = ApplicationInfo { + application_name: Some("Hello Triangle".into()), + application_version: Some(Version { major: 1, minor: 0, patch: 0 }), + engine_name: Some("No Engine".into()), + engine_version: Some(Version { major: 1, minor: 0, patch: 0 }), + }; + + let required_extensions = Self::get_required_extensions(); + + if ENABLE_VALIDATION_LAYERS && Self::check_validation_layer_support() { + Instance::new(Some(&app_info), &required_extensions, VALIDATION_LAYERS.iter().map(|s| *s)) + .expect("failed to create Vulkan instance") + } else { + Instance::new(Some(&app_info), &required_extensions, None) + .expect("failed to create Vulkan instance") + } + } + + fn check_validation_layer_support() -> bool { + let layers: Vec<_> = layers_list().unwrap().map(|l| l.name().to_owned()).collect(); + VALIDATION_LAYERS.iter() + .all(|layer_name| layers.contains(&layer_name.to_string())) + } + + fn get_required_extensions() -> InstanceExtensions { + let mut extensions = vulkano_win::required_extensions(); + if ENABLE_VALIDATION_LAYERS { + // TODO!: this should be ext_debug_utils (_report is deprecated), but that doesn't exist yet in vulkano + extensions.ext_debug_report = true; + } + + extensions + } + + fn setup_debug_callback(instance: &Arc) -> Option { + if !ENABLE_VALIDATION_LAYERS { + return None; + } + + let msg_types = MessageTypes { + error: true, + warning: true, + performance_warning: true, + information: false, + debug: true, + }; + DebugCallback::new(&instance, msg_types, |msg| { + println!("validation layer: {:?}", msg.description); + }).ok() + } + + fn pick_physical_device(instance: &Arc, surface: &Arc>) -> usize { + PhysicalDevice::enumerate(&instance) + .position(|device| Self::is_device_suitable(surface, &device)) + .expect("failed to find a suitable GPU!") + } + + fn is_device_suitable(surface: &Arc>, device: &PhysicalDevice) -> bool { + let indices = Self::find_queue_families(surface, device); + let extensions_supported = Self::check_device_extension_support(device); + + let swap_chain_adequate = if extensions_supported { + let capabilities = surface.capabilities(*device) + .expect("failed to get surface capabilities"); + !capabilities.supported_formats.is_empty() && + capabilities.present_modes.iter().next().is_some() + } else { + false + }; + + indices.is_complete() && extensions_supported && swap_chain_adequate + } + + fn check_device_extension_support(device: &PhysicalDevice) -> bool { + let available_extensions = DeviceExtensions::supported_by_device(*device); + let device_extensions = device_extensions(); + available_extensions.intersection(&device_extensions) == device_extensions + } + + fn choose_swap_surface_format(available_formats: &[(Format, ColorSpace)]) -> (Format, ColorSpace) { + // NOTE: the 'preferred format' mentioned in the tutorial doesn't seem to be + // queryable in Vulkano (no VK_FORMAT_UNDEFINED enum) + *available_formats.iter() + .find(|(format, color_space)| + *format == Format::B8G8R8A8Unorm && *color_space == ColorSpace::SrgbNonLinear + ) + .unwrap_or_else(|| &available_formats[0]) + } + + fn choose_swap_present_mode(available_present_modes: SupportedPresentModes) -> PresentMode { + if available_present_modes.mailbox { + PresentMode::Mailbox + } else if available_present_modes.immediate { + PresentMode::Immediate + } else { + PresentMode::Fifo + } + } + + fn choose_swap_extent(capabilities: &Capabilities) -> [u32; 2] { + if let Some(current_extent) = capabilities.current_extent { + return current_extent + } else { + let mut actual_extent = [WIDTH, HEIGHT]; + actual_extent[0] = capabilities.min_image_extent[0] + .max(capabilities.max_image_extent[0].min(actual_extent[0])); + actual_extent[1] = capabilities.min_image_extent[1] + .max(capabilities.max_image_extent[1].min(actual_extent[1])); + actual_extent + } + } + + fn create_swap_chain( + instance: &Arc, + surface: &Arc>, + physical_device_index: usize, + device: &Arc, + graphics_queue: &Arc, + present_queue: &Arc, + old_swapchain: Option>>, + ) -> (Arc>, Vec>>) { + let physical_device = PhysicalDevice::from_index(&instance, physical_device_index).unwrap(); + let capabilities = surface.capabilities(physical_device) + .expect("failed to get surface capabilities"); + + let surface_format = Self::choose_swap_surface_format(&capabilities.supported_formats); + let present_mode = Self::choose_swap_present_mode(capabilities.present_modes); + let extent = Self::choose_swap_extent(&capabilities); + + let mut image_count = capabilities.min_image_count + 1; + if capabilities.max_image_count.is_some() && image_count > capabilities.max_image_count.unwrap() { + image_count = capabilities.max_image_count.unwrap(); + } + + let image_usage = ImageUsage { + color_attachment: true, + .. ImageUsage::none() + }; + + let indices = Self::find_queue_families(&surface, &physical_device); + + let sharing: SharingMode = if indices.graphics_family != indices.present_family { + vec![graphics_queue, present_queue].as_slice().into() + } else { + graphics_queue.into() + }; + + let (swap_chain, images) = Swapchain::new( + device.clone(), + surface.clone(), + image_count, + surface_format.0, // TODO: color space? + extent, + 1, // layers + image_usage, + sharing, + capabilities.current_transform, + CompositeAlpha::Opaque, + present_mode, + true, // clipped + old_swapchain.as_ref() + ).expect("failed to create swap chain!"); + + (swap_chain, images) + } + + fn create_render_pass(device: &Arc, color_format: Format) -> Arc { + Arc::new(single_pass_renderpass!(device.clone(), + attachments: { + color: { + load: Clear, + store: Store, + format: color_format, + samples: 1, + } + }, + pass: { + color: [color], + depth_stencil: {} + } + ).unwrap()) + } + + fn create_graphics_pipeline( + device: &Arc, + swap_chain_extent: [u32; 2], + render_pass: &Arc, + ) -> Arc { + mod vertex_shader { + vulkano_shaders::shader! { + ty: "vertex", + path: "src/bin/21_shader_uniformbuffer.vert" + } + } + + mod fragment_shader { + vulkano_shaders::shader! { + ty: "fragment", + path: "src/bin/21_shader_uniformbuffer.frag" + } + } + + let vert_shader_module = vertex_shader::Shader::load(device.clone()) + .expect("failed to create vertex shader module!"); + let frag_shader_module = fragment_shader::Shader::load(device.clone()) + .expect("failed to create fragment shader module!"); + + let dimensions = [swap_chain_extent[0] as f32, swap_chain_extent[1] as f32]; + let viewport = Viewport { + origin: [0.0, 0.0], + dimensions, + depth_range: 0.0 .. 1.0, + }; + + Arc::new(GraphicsPipeline::start() + .vertex_input_single_buffer::() + .vertex_shader(vert_shader_module.main_entry_point(), ()) + .triangle_list() + .primitive_restart(false) + .viewports(vec![viewport]) // NOTE: also sets scissor to cover whole viewport + .fragment_shader(frag_shader_module.main_entry_point(), ()) + .depth_clamp(false) + // NOTE: there's an outcommented .rasterizer_discard() in Vulkano... + .polygon_mode_fill() // = default + .line_width(1.0) // = default + .cull_mode_back() + .front_face_counter_clockwise() + // NOTE: no depth_bias here, but on pipeline::raster::Rasterization + .blend_pass_through() // = default + .render_pass(Subpass::from(render_pass.clone(), 0).unwrap()) + .build(device.clone()) + .unwrap() + ) + } + + fn create_framebuffers( + swap_chain_images: &Vec>>, + render_pass: &Arc + ) -> Vec> { + swap_chain_images.iter() + .map(|image| { + let fba: Arc = Arc::new(Framebuffer::start(render_pass.clone()) + .add(image.clone()).unwrap() + .build().unwrap()); + fba + } + ).collect::>() + } + + fn create_texture_image(graphics_queue: &Arc) -> Arc> { + let image = image::open(TEXTURE_PATH).unwrap(); + + let width = image.width(); + let height = image.height(); + + let image_rgba = image.to_rgba(); + + let (image_view, future) = ImmutableImage::from_iter( + image_rgba.into_raw().iter().cloned(), + Dimensions::Dim2d{ width, height }, + Format::R8G8B8A8Unorm, + graphics_queue.clone() + ).unwrap(); + + future.flush().unwrap(); + + return image_view; + } + + fn create_vertex_buffer(graphics_queue: &Arc) -> Arc { + let (buffer, future) = ImmutableBuffer::from_iter( + vertices().iter().cloned(), BufferUsage::vertex_buffer(), + graphics_queue.clone()) + .unwrap(); + future.flush().unwrap(); + buffer + } + + fn create_index_buffer(graphics_queue: &Arc) -> Arc + Send + Sync> { + let (buffer, future) = ImmutableBuffer::from_iter( + indices().iter().cloned(), BufferUsage::index_buffer(), + graphics_queue.clone()) + .unwrap(); + future.flush().unwrap(); + buffer + } + + fn create_uniform_buffers( + device: &Arc, + num_buffers: usize, + start_time: Instant, + dimensions_u32: [u32; 2] + ) -> Vec>> { + let mut buffers = Vec::new(); + + let dimensions = [dimensions_u32[0] as f32, dimensions_u32[1] as f32]; + + let uniform_buffer = Self::update_uniform_buffer(start_time, dimensions); + + for _ in 0..num_buffers { + let buffer = CpuAccessibleBuffer::from_data( + device.clone(), + BufferUsage::uniform_buffer_transfer_destination(), + uniform_buffer, + ).unwrap(); + + buffers.push(buffer); + } + + buffers + } + + fn create_descriptor_pool(graphics_pipeline: &Arc) + -> Arc>>> + { + Arc::new( + Mutex::new( + FixedSizeDescriptorSetsPool::new(graphics_pipeline.clone(), 0) + ) + ) + } + + fn create_descriptor_sets( + pool: &Arc>>>, + uniform_buffers: &Vec>>, + ) -> Vec, ((), vulkano::descriptor::descriptor_set::PersistentDescriptorSetBuf>>)>>> + { + uniform_buffers + .iter() + .map(|uniform_buffer| + Arc::new( + pool + .lock() + .unwrap() + .next() + .add_buffer(uniform_buffer.clone()) + .unwrap() + .build() + .unwrap() + ) + ) + .collect() + } + + fn create_command_buffers(&mut self) { + let queue_family = self.graphics_queue.family(); + let dimensions = [self.swap_chain.dimensions()[0] as f32, self.swap_chain.dimensions()[1] as f32]; + + self.command_buffers = self.swap_chain_framebuffers + .iter() + .enumerate() + .map(|(i, framebuffer)| { + Arc::new(AutoCommandBufferBuilder::primary_simultaneous_use(self.device.clone(), queue_family) + .unwrap() + .update_buffer(self.uniform_buffers[i].clone(), Self::update_uniform_buffer(self.start_time, dimensions)) + .unwrap() + .begin_render_pass(framebuffer.clone(), false, vec![[0.0, 0.0, 0.0, 1.0].into()]) + .unwrap() + .draw_indexed( + self.graphics_pipeline.clone(), + &DynamicState::none(), + vec![self.vertex_buffer.clone()], + self.index_buffer.clone(), + self.descriptor_sets[i].clone(), + ()) + .unwrap() + .end_render_pass() + .unwrap() + .build() + .unwrap()) + }) + .collect(); + } + + fn create_sync_objects(device: &Arc) -> Box { + Box::new(sync::now(device.clone())) as Box + } + + fn find_queue_families(surface: &Arc>, device: &PhysicalDevice) -> QueueFamilyIndices { + let mut indices = QueueFamilyIndices::new(); + // TODO: replace index with id to simplify? + for (i, queue_family) in device.queue_families().enumerate() { + if queue_family.supports_graphics() { + indices.graphics_family = i as i32; + } + + if surface.is_supported(queue_family).unwrap() { + indices.present_family = i as i32; + } + + if indices.is_complete() { + break; + } + } + + indices + } + + fn create_logical_device( + instance: &Arc, + surface: &Arc>, + physical_device_index: usize, + ) -> (Arc, Arc, Arc) { + let physical_device = PhysicalDevice::from_index(&instance, physical_device_index).unwrap(); + let indices = Self::find_queue_families(&surface, &physical_device); + + let families = [indices.graphics_family, indices.present_family]; + use std::iter::FromIterator; + let unique_queue_families: HashSet<&i32> = HashSet::from_iter(families.iter()); + + let queue_priority = 1.0; + let queue_families = unique_queue_families.iter().map(|i| { + (physical_device.queue_families().nth(**i as usize).unwrap(), queue_priority) + }); + + // NOTE: the tutorial recommends passing the validation layers as well + // for legacy reasons (if ENABLE_VALIDATION_LAYERS is true). Vulkano handles that + // for us internally. + + let (device, mut queues) = Device::new(physical_device, &Features::none(), + &device_extensions(), queue_families) + .expect("failed to create logical device!"); + + let graphics_queue = queues.next().unwrap(); + let present_queue = queues.next().unwrap_or_else(|| graphics_queue.clone()); + + (device, graphics_queue, present_queue) + } + + fn create_surface(instance: &Arc) -> (EventsLoop, Arc>) { + let events_loop = EventsLoop::new(); + let surface = WindowBuilder::new() + .with_title("Vulkan") + .with_dimensions(LogicalSize::new(f64::from(WIDTH), f64::from(HEIGHT))) + .build_vk_surface(&events_loop, instance.clone()) + .expect("failed to create window surface!"); + (events_loop, surface) + } + + #[allow(unused)] + fn main_loop(&mut self) { + loop { + self.create_command_buffers(); + self.draw_frame(); + + let mut done = false; + self.events_loop.poll_events(|ev| { + match ev { + Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => done = true, + _ => () + } + }); + if done { + return; + } + } + } + + fn draw_frame(&mut self) { + self.previous_frame_end.as_mut().unwrap().cleanup_finished(); + + if self.recreate_swap_chain { + self.recreate_swap_chain(); + self.recreate_swap_chain = false; + } + + let (image_index, acquire_future) = match acquire_next_image(self.swap_chain.clone(), None) { + Ok(r) => r, + Err(AcquireError::OutOfDate) => { + self.recreate_swap_chain = true; + return; + }, + Err(err) => panic!("{:?}", err) + }; + + let command_buffer = self.command_buffers[image_index].clone(); + + let future = self.previous_frame_end.take().unwrap() + .join(acquire_future) + .then_execute(self.graphics_queue.clone(), command_buffer) + .unwrap() + .then_swapchain_present(self.present_queue.clone(), self.swap_chain.clone(), image_index) + .then_signal_fence_and_flush(); + + match future { + Ok(future) => { + self.previous_frame_end = Some(Box::new(future) as Box<_>); + } + Err(vulkano::sync::FlushError::OutOfDate) => { + self.recreate_swap_chain = true; + self.previous_frame_end + = Some(Box::new(vulkano::sync::now(self.device.clone())) as Box<_>); + } + Err(e) => { + println!("{:?}", e); + self.previous_frame_end + = Some(Box::new(vulkano::sync::now(self.device.clone())) as Box<_>); + } + } + } + + fn update_uniform_buffer(start_time: Instant, dimensions: [f32; 2]) -> UniformBufferObject { + let duration = Instant::now().duration_since(start_time); + let elapsed = (duration.as_secs() * 1000) + duration.subsec_millis() as u64; + + let identity_matrix = glm::mat4( + 1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0, + ); + + let model = glm::ext::rotate(&identity_matrix, (elapsed as f32) * glm::radians(0.180), glm::vec3(0.0, 0.0, 1.00)); + + let view = glm::ext::look_at( + glm::vec3(2.0, 2.0, 2.0), + glm::vec3(0.0, 0.0, 0.0), + glm::vec3(0.0, 0.0, 1.0) + ); + let mut proj = glm::ext::perspective( + glm::radians(45.0,), + dimensions[0] as f32 / dimensions[1] as f32, + 0.1, + 10.0 + ); + + proj.c1.y *= -1.0; + + UniformBufferObject { model, view, proj } + } + + fn recreate_swap_chain(&mut self) { + let (swap_chain, images) = Self::create_swap_chain(&self.instance, &self.surface, self.physical_device_index, + &self.device, &self.graphics_queue, &self.present_queue, Some(self.swap_chain.clone())); + self.swap_chain = swap_chain; + self.swap_chain_images = images; + + self.render_pass = Self::create_render_pass(&self.device, self.swap_chain.format()); + self.graphics_pipeline = Self::create_graphics_pipeline(&self.device, self.swap_chain.dimensions(), + &self.render_pass); + self.swap_chain_framebuffers = Self::create_framebuffers(&self.swap_chain_images, &self.render_pass); + self.create_command_buffers(); + } +} + +fn main() { + let mut app = HelloTriangleApplication::initialize(); + app.main_loop(); +} \ No newline at end of file diff --git a/src/bin/23_images.rs.diff b/src/bin/23_images.rs.diff new file mode 100644 index 0000000..bc86c6b --- /dev/null +++ b/src/bin/23_images.rs.diff @@ -0,0 +1,96 @@ +--- a/22_descriptor_pools_and_sets.rs ++++ b/23_images.rs +@@ -2,6 +2,7 @@ + extern crate vulkano; + extern crate vulkano_win; + extern crate winit; ++extern crate image; + + use std::sync::{Arc, Mutex}; + use std::collections::HashSet; +@@ -32,7 +33,12 @@ use vulkano::swapchain::{ + AcquireError, + }; + use vulkano::format::Format; +-use vulkano::image::{ImageUsage, swapchain::SwapchainImage}; ++use vulkano::image::{ ++ ImageUsage, ++ swapchain::SwapchainImage, ++ ImmutableImage, ++ Dimensions ++}; + use vulkano::sync::{self, SharingMode, GpuFuture}; + use vulkano::pipeline::{ + GraphicsPipeline, +@@ -62,6 +68,8 @@ use vulkano::descriptor::descriptor_set::{ + FixedSizeDescriptorSet + }; + ++use image::GenericImageView; ++ + const WIDTH: u32 = 800; + const HEIGHT: u32 = 600; + +@@ -69,6 +77,8 @@ const VALIDATION_LAYERS: &[&str] = &[ + "VK_LAYER_LUNARG_standard_validation" + ]; + ++const TEXTURE_PATH: &'static str = "src/bin/23_statue.jpg"; ++ + /// Required device extensions + fn device_extensions() -> DeviceExtensions { + DeviceExtensions { +@@ -150,6 +160,8 @@ struct HelloTriangleApplication { + + swap_chain_framebuffers: Vec>, + ++ texture_image: Arc>, ++ + vertex_buffer: Arc, + index_buffer: Arc + Send + Sync>, + uniform_buffers: Vec>>, +@@ -185,6 +197,8 @@ impl HelloTriangleApplication { + + let start_time = Instant::now(); + ++ let texture_image = Self::create_texture_image(&graphics_queue); ++ + let vertex_buffer = Self::create_vertex_buffer(&graphics_queue); + let index_buffer = Self::create_index_buffer(&graphics_queue); + let uniform_buffers = Self::create_uniform_buffers(&device, swap_chain_images.len(), start_time, swap_chain.dimensions()); +@@ -215,6 +229,8 @@ impl HelloTriangleApplication { + + swap_chain_framebuffers, + ++ texture_image, ++ + vertex_buffer, + index_buffer, + uniform_buffers, +@@ -491,6 +507,26 @@ impl HelloTriangleApplication { + ).collect::>() + } + ++ fn create_texture_image(graphics_queue: &Arc) -> Arc> { ++ let image = image::open(TEXTURE_PATH).unwrap(); ++ ++ let width = image.width(); ++ let height = image.height(); ++ ++ let image_rgba = image.to_rgba(); ++ ++ let (image_view, future) = ImmutableImage::from_iter( ++ image_rgba.into_raw().iter().cloned(), ++ Dimensions::Dim2d{ width, height }, ++ Format::R8G8B8A8Unorm, ++ graphics_queue.clone() ++ ).unwrap(); ++ ++ future.flush().unwrap(); ++ ++ return image_view; ++ } ++ + fn create_vertex_buffer(graphics_queue: &Arc) -> Arc { + let (buffer, future) = ImmutableBuffer::from_iter( + vertices().iter().cloned(), BufferUsage::vertex_buffer(), diff --git a/src/bin/23_statue.jpg b/src/bin/23_statue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce168676c085fb023df1e8207053e656d64bd82c GIT binary patch literal 93643 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 literal 0 HcmV?d00001