Improve boundaries between quad submodules in iced_wgpu
This commit is contained in:
parent
5fdc5affce
commit
ef547469fd
3 changed files with 75 additions and 55 deletions
|
|
@ -116,21 +116,23 @@ impl Pipeline {
|
||||||
for (kind, count) in &quads.order {
|
for (kind, count) in &quads.order {
|
||||||
match kind {
|
match kind {
|
||||||
Kind::Solid => {
|
Kind::Solid => {
|
||||||
render_pass.set_pipeline(&self.solid.pipeline);
|
self.solid.render(
|
||||||
layer.solid.draw(
|
|
||||||
&layer.constants,
|
|
||||||
render_pass,
|
render_pass,
|
||||||
|
&layer.constants,
|
||||||
|
&layer.solid,
|
||||||
solid_offset..(solid_offset + count),
|
solid_offset..(solid_offset + count),
|
||||||
);
|
);
|
||||||
|
|
||||||
solid_offset += count;
|
solid_offset += count;
|
||||||
}
|
}
|
||||||
Kind::Gradient => {
|
Kind::Gradient => {
|
||||||
render_pass.set_pipeline(&self.gradient.pipeline);
|
self.gradient.render(
|
||||||
layer.gradient.draw(
|
|
||||||
&layer.constants,
|
|
||||||
render_pass,
|
render_pass,
|
||||||
|
&layer.constants,
|
||||||
|
&layer.gradient,
|
||||||
gradient_offset..(gradient_offset + count),
|
gradient_offset..(gradient_offset + count),
|
||||||
);
|
);
|
||||||
|
|
||||||
gradient_offset += count;
|
gradient_offset += count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -199,17 +201,8 @@ impl Layer {
|
||||||
bytemuck::bytes_of(&uniforms),
|
bytemuck::bytes_of(&uniforms),
|
||||||
);
|
);
|
||||||
|
|
||||||
let _ = self.solid.instances.resize(device, quads.solids.len());
|
self.solid.prepare(device, queue, &quads.solids);
|
||||||
let _ = self
|
self.gradient.prepare(device, queue, &quads.gradients);
|
||||||
.gradient
|
|
||||||
.instances
|
|
||||||
.resize(device, quads.gradients.len());
|
|
||||||
|
|
||||||
let _ = self.solid.instances.write(queue, 0, &quads.solids);
|
|
||||||
let _ = self.gradient.instances.write(queue, 0, &quads.gradients);
|
|
||||||
|
|
||||||
self.solid.instance_count = quads.solids.len();
|
|
||||||
self.gradient.instance_count = quads.gradients.len();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,13 +24,13 @@ unsafe impl Zeroable for Gradient {}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Pipeline {
|
pub struct Pipeline {
|
||||||
pub pipeline: wgpu::RenderPipeline,
|
pipeline: wgpu::RenderPipeline,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Layer {
|
pub struct Layer {
|
||||||
pub instances: Buffer<Gradient>,
|
instances: Buffer<Gradient>,
|
||||||
pub instance_count: usize,
|
instance_count: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Layer {
|
impl Layer {
|
||||||
|
|
@ -48,23 +48,16 @@ impl Layer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw<'a>(
|
pub fn prepare(
|
||||||
&'a self,
|
&mut self,
|
||||||
constants: &'a wgpu::BindGroup,
|
device: &wgpu::Device,
|
||||||
render_pass: &mut wgpu::RenderPass<'a>,
|
queue: &wgpu::Queue,
|
||||||
range: Range<usize>,
|
instances: &[Gradient],
|
||||||
) {
|
) {
|
||||||
#[cfg(feature = "tracing")]
|
let _ = self.instances.resize(device, instances.len());
|
||||||
let _ = tracing::info_span!("Wgpu::Quad::Gradient", "DRAW").entered();
|
let _ = self.instances.write(queue, 0, instances);
|
||||||
|
|
||||||
render_pass.set_bind_group(0, constants, &[]);
|
self.instance_count = instances.len();
|
||||||
render_pass.set_vertex_buffer(1, self.instances.slice(..));
|
|
||||||
|
|
||||||
render_pass.draw_indexed(
|
|
||||||
0..quad::INDICES.len() as u32,
|
|
||||||
0,
|
|
||||||
range.start as u32..range.end as u32,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -158,4 +151,25 @@ impl Pipeline {
|
||||||
|
|
||||||
Self { pipeline }
|
Self { pipeline }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn render<'a>(
|
||||||
|
&'a self,
|
||||||
|
render_pass: &mut wgpu::RenderPass<'a>,
|
||||||
|
constants: &'a wgpu::BindGroup,
|
||||||
|
layer: &'a Layer,
|
||||||
|
range: Range<usize>,
|
||||||
|
) {
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
let _ = tracing::info_span!("Wgpu::Quad::Gradient", "DRAW").entered();
|
||||||
|
|
||||||
|
render_pass.set_pipeline(&self.pipeline);
|
||||||
|
render_pass.set_bind_group(0, constants, &[]);
|
||||||
|
render_pass.set_vertex_buffer(1, layer.instances.slice(..));
|
||||||
|
|
||||||
|
render_pass.draw_indexed(
|
||||||
|
0..quad::INDICES.len() as u32,
|
||||||
|
0,
|
||||||
|
range.start as u32..range.end as u32,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,13 @@ pub struct Solid {
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Pipeline {
|
pub struct Pipeline {
|
||||||
pub pipeline: wgpu::RenderPipeline,
|
pipeline: wgpu::RenderPipeline,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Layer {
|
pub struct Layer {
|
||||||
pub instances: Buffer<quad::Solid>,
|
instances: Buffer<Solid>,
|
||||||
pub instance_count: usize,
|
instance_count: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Layer {
|
impl Layer {
|
||||||
|
|
@ -41,23 +41,16 @@ impl Layer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw<'a>(
|
pub fn prepare(
|
||||||
&'a self,
|
&mut self,
|
||||||
constants: &'a wgpu::BindGroup,
|
device: &wgpu::Device,
|
||||||
render_pass: &mut wgpu::RenderPass<'a>,
|
queue: &wgpu::Queue,
|
||||||
range: Range<usize>,
|
instances: &[Solid],
|
||||||
) {
|
) {
|
||||||
#[cfg(feature = "tracing")]
|
let _ = self.instances.resize(device, instances.len());
|
||||||
let _ = tracing::info_span!("Wgpu::Quad::Solid", "DRAW").entered();
|
let _ = self.instances.write(queue, 0, instances);
|
||||||
|
|
||||||
render_pass.set_bind_group(0, constants, &[]);
|
self.instance_count = instances.len();
|
||||||
render_pass.set_vertex_buffer(1, self.instances.slice(..));
|
|
||||||
|
|
||||||
render_pass.draw_indexed(
|
|
||||||
0..quad::INDICES.len() as u32,
|
|
||||||
0,
|
|
||||||
range.start as u32..range.end as u32,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,8 +85,7 @@ impl Pipeline {
|
||||||
buffers: &[
|
buffers: &[
|
||||||
quad::Vertex::buffer_layout(),
|
quad::Vertex::buffer_layout(),
|
||||||
wgpu::VertexBufferLayout {
|
wgpu::VertexBufferLayout {
|
||||||
array_stride: std::mem::size_of::<quad::Solid>()
|
array_stride: std::mem::size_of::<Solid>() as u64,
|
||||||
as u64,
|
|
||||||
step_mode: wgpu::VertexStepMode::Instance,
|
step_mode: wgpu::VertexStepMode::Instance,
|
||||||
attributes: &wgpu::vertex_attr_array!(
|
attributes: &wgpu::vertex_attr_array!(
|
||||||
// Color
|
// Color
|
||||||
|
|
@ -133,4 +125,25 @@ impl Pipeline {
|
||||||
|
|
||||||
Self { pipeline }
|
Self { pipeline }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn render<'a>(
|
||||||
|
&'a self,
|
||||||
|
render_pass: &mut wgpu::RenderPass<'a>,
|
||||||
|
constants: &'a wgpu::BindGroup,
|
||||||
|
layer: &'a Layer,
|
||||||
|
range: Range<usize>,
|
||||||
|
) {
|
||||||
|
#[cfg(feature = "tracing")]
|
||||||
|
let _ = tracing::info_span!("Wgpu::Quad::Solid", "DRAW").entered();
|
||||||
|
|
||||||
|
render_pass.set_pipeline(&self.pipeline);
|
||||||
|
render_pass.set_bind_group(0, constants, &[]);
|
||||||
|
render_pass.set_vertex_buffer(1, layer.instances.slice(..));
|
||||||
|
|
||||||
|
render_pass.draw_indexed(
|
||||||
|
0..quad::INDICES.len() as u32,
|
||||||
|
0,
|
||||||
|
range.start as u32..range.end as u32,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue