working scissor proof of concept

This commit is contained in:
Aleksander
2025-09-24 21:53:43 +02:00
parent 8d41d8bbd1
commit 8f75d451e4
11 changed files with 175 additions and 146 deletions

View File

@@ -14,7 +14,7 @@ use vulkano::{
},
pipeline::{
Pipeline, PipelineBindPoint,
graphics::{vertex_input::Vertex, viewport::Viewport},
graphics::{self, vertex_input::Vertex, viewport::Viewport},
},
};
@@ -38,6 +38,7 @@ where
vertices: Range<u32>,
instances: Range<u32>,
descriptor_sets: Vec<Arc<DescriptorSet>>,
vk_scissor: &graphics::viewport::Scissor,
) -> anyhow::Result<Self> {
let viewport = Viewport {
offset: [0.0, 0.0],
@@ -64,6 +65,7 @@ where
unsafe {
command_buffer
.set_viewport(0, smallvec![viewport])?
.set_scissor(0, smallvec![*vk_scissor])?
.bind_pipeline_graphics(pipeline_inner)?
.bind_descriptor_sets(
PipelineBindPoint::Graphics,
@@ -88,12 +90,7 @@ where
})
}
pub fn update_sampler(
&self,
set: usize,
texture: Arc<ImageView>,
filter: Filter,
) -> anyhow::Result<()> {
pub fn update_sampler(&self, set: usize, texture: Arc<ImageView>, filter: Filter) -> anyhow::Result<()> {
let sampler = Sampler::new(
self.graphics.device.clone(),
SamplerCreateInfo {
@@ -105,10 +102,7 @@ where
)?;
unsafe {
self.descriptor_sets[set].update_by_ref(
[WriteDescriptorSet::image_view_sampler(0, texture, sampler)],
[],
)?;
self.descriptor_sets[set].update_by_ref([WriteDescriptorSet::image_view_sampler(0, texture, sampler)], [])?;
}
Ok(())

View File

@@ -16,7 +16,7 @@ use vulkano::{
pipeline::{
DynamicState, GraphicsPipeline, Pipeline, PipelineLayout,
graphics::{
GraphicsPipelineCreateInfo,
self, GraphicsPipelineCreateInfo,
color_blend::{AttachmentBlend, ColorBlendAttachmentState, ColorBlendState},
input_assembly::{InputAssemblyState, PrimitiveTopology},
multisample::MultisampleState,
@@ -91,7 +91,7 @@ where
}],
..Default::default()
}),
dynamic_state: std::iter::once(DynamicState::Viewport).collect(),
dynamic_state: [DynamicState::Viewport, DynamicState::Scissor].into_iter().collect(),
subpass: Some(subpass.into()),
..GraphicsPipelineCreateInfo::layout(layout)
},
@@ -105,7 +105,6 @@ where
})
}
pub fn inner(&self) -> Arc<GraphicsPipeline> {
self.pipeline.clone()
}
@@ -151,11 +150,7 @@ where
}
#[allow(clippy::needless_pass_by_value)]
pub fn uniform_buffer_upload<T>(
&self,
set: usize,
data: Vec<T>,
) -> anyhow::Result<Arc<DescriptorSet>>
pub fn uniform_buffer_upload<T>(&self, set: usize, data: Vec<T>) -> anyhow::Result<Arc<DescriptorSet>>
where
T: BufferContents + Copy,
{
@@ -163,8 +158,7 @@ where
self.graphics.memory_allocator.clone(),
SubbufferAllocatorCreateInfo {
buffer_usage: BufferUsage::UNIFORM_BUFFER,
memory_type_filter: MemoryTypeFilter::PREFER_DEVICE
| MemoryTypeFilter::HOST_SEQUENTIAL_WRITE,
memory_type_filter: MemoryTypeFilter::PREFER_DEVICE | MemoryTypeFilter::HOST_SEQUENTIAL_WRITE,
..Default::default()
},
);
@@ -219,6 +213,7 @@ where
vertices: Range<u32>,
instances: Range<u32>,
descriptor_sets: Vec<Arc<DescriptorSet>>,
vk_scissor: &graphics::viewport::Scissor,
) -> anyhow::Result<WGfxPass<V>> {
WGfxPass::new(
&self.clone(),
@@ -227,6 +222,7 @@ where
vertices,
instances,
descriptor_sets,
vk_scissor,
)
}
}