ugga ugga. Lifetime problems with the Canvas
This commit is contained in:
@@ -45,7 +45,8 @@ use crate::util::compute_image::ComputeImage;
|
||||
|
||||
use vulkano::descriptor::descriptor::DescriptorDesc;
|
||||
use crate::vertex_2d::ColoredVertex2D;
|
||||
|
||||
use crate::canvas::Canvas;
|
||||
use std::mem;
|
||||
|
||||
|
||||
/// This method is called once during initialization, then again whenever the window is resized
|
||||
@@ -99,7 +100,8 @@ pub struct VkProcessor<'a> {
|
||||
|
||||
swapchain_recreate_needed: bool,
|
||||
|
||||
capabilities: Capabilities
|
||||
capabilities: Capabilities,
|
||||
canvas: Canvas,
|
||||
}
|
||||
|
||||
|
||||
@@ -107,8 +109,6 @@ impl<'a> VkProcessor<'a> {
|
||||
|
||||
pub fn new(instance: &'a Arc<Instance>, surface: &'a Arc<Surface<Window>>) -> VkProcessor<'a> {
|
||||
|
||||
|
||||
|
||||
let physical = PhysicalDevice::enumerate(instance).next().unwrap();
|
||||
|
||||
let queue_family = physical.queue_families().find(|&q| {
|
||||
@@ -126,11 +126,13 @@ impl<'a> VkProcessor<'a> {
|
||||
[(queue_family, 0.5)].iter().cloned()).unwrap();
|
||||
let queue = queues.next().unwrap();
|
||||
|
||||
let capabilities = surface.capabilities(physical).unwrap();
|
||||
|
||||
VkProcessor {
|
||||
instance: instance.clone(),
|
||||
physical: physical.clone(),
|
||||
device: device.clone(),
|
||||
queue: queue,
|
||||
queue: queue.clone(),
|
||||
queues: queues,
|
||||
dynamic_state: DynamicState { line_width: None, viewports: None, scissors: None },
|
||||
shader_kernels: None,
|
||||
@@ -142,7 +144,8 @@ impl<'a> VkProcessor<'a> {
|
||||
swapchain: None,
|
||||
swapchain_images: None,
|
||||
swapchain_recreate_needed: false,
|
||||
capabilities: surface.capabilities(physical).unwrap()
|
||||
capabilities: capabilities.clone(),
|
||||
canvas: Canvas::new(queue, device, physical, capabilities)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +349,10 @@ impl<'a> VkProcessor<'a> {
|
||||
|
||||
|
||||
|
||||
pub fn run(&mut self, surface: &'a Arc<Surface<Window>>, mut frame_future: Box<dyn GpuFuture>) -> Box<dyn GpuFuture> {
|
||||
pub fn run(&mut self,
|
||||
surface: &'a Arc<Surface<Window>>,
|
||||
mut frame_future: Box<dyn GpuFuture>,
|
||||
) -> Box<dyn GpuFuture> {
|
||||
|
||||
let mut framebuffers = window_size_dependent_setup(&self.swapchain_images.clone().unwrap().clone(),
|
||||
self.shader_kernels.clone().unwrap().render_pass.clone(),
|
||||
@@ -397,26 +403,20 @@ impl<'a> VkProcessor<'a> {
|
||||
.get_descriptor_set(self.compute_kernel.clone().unwrap().clone().get_pipeline()).clone(), ()).unwrap()
|
||||
|
||||
.copy_buffer_to_image(self.compute_image.clone().unwrap().clone().rw_buffers.get(0).unwrap().clone(),
|
||||
self.compute_image.clone().unwrap().clone().get_swap_buffer().clone()).unwrap()
|
||||
self.compute_image.clone().unwrap().clone().get_swap_buffer().clone()).unwrap();
|
||||
|
||||
.begin_render_pass(framebuffers[image_num].clone(), false, clear_values.clone())
|
||||
.unwrap()
|
||||
|
||||
.draw(self.shader_kernels.clone().unwrap().get_pipeline(),
|
||||
&self.dynamic_state.clone(), v,
|
||||
vec![self.get_image_set()], ())
|
||||
.unwrap();
|
||||
/*
|
||||
Fuck. So this is a problem...
|
||||
|
||||
command_buffer = command_buffer.draw(self.shader_kernels.clone().unwrap().get_pipeline(),
|
||||
&self.dynamic_state.clone(), v2,
|
||||
vec![self.get_gui_image_set()], ())
|
||||
.unwrap();
|
||||
I can't replace canvas.
|
||||
*/
|
||||
|
||||
let command_buffer = command_buffer
|
||||
.end_render_pass()
|
||||
.unwrap()
|
||||
self.canvas.draw_commands(&mut command_buffer, framebuffers, image_num);
|
||||
|
||||
.build().unwrap();
|
||||
//self.canvas = mem::replace(&mut self.canvas,
|
||||
|
||||
let command_buffer = command_buffer.build().unwrap();
|
||||
|
||||
// Wait on the previous frame, then execute the command buffer and present the image
|
||||
let future = frame_future.join(acquire_future)
|
||||
|
||||
Reference in New Issue
Block a user