wgpu: Inline IncompleteDrawType::build
This commit is contained in:
parent
3da60a2e04
commit
e1734a2bec
|
@ -345,31 +345,150 @@ impl<T: RenderTarget> WgpuRenderBackend<T> {
|
|||
return;
|
||||
}
|
||||
|
||||
let vbo = create_buffer_with_data(
|
||||
let vertex_buffer = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&lyon_mesh.vertices),
|
||||
wgpu::BufferUsage::VERTEX,
|
||||
create_debug_label!("Shape {} ({}) vbo", shape_id, draw.name()),
|
||||
);
|
||||
|
||||
let ibo = create_buffer_with_data(
|
||||
let index_buffer = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&lyon_mesh.indices),
|
||||
wgpu::BufferUsage::INDEX,
|
||||
create_debug_label!("Shape {} ({}) ibo", shape_id, draw.name()),
|
||||
);
|
||||
|
||||
let index_count = lyon_mesh.indices.len() as u32;
|
||||
let draw_id = draws.len();
|
||||
|
||||
draws.push(draw.build(
|
||||
draws.push(match draw {
|
||||
IncompleteDrawType::Color => Draw {
|
||||
draw_type: DrawType::Color,
|
||||
vertex_buffer,
|
||||
index_buffer,
|
||||
index_count,
|
||||
},
|
||||
IncompleteDrawType::Gradient {
|
||||
texture_transform,
|
||||
gradient,
|
||||
} => {
|
||||
let tex_transforms_ubo = create_buffer_with_data(
|
||||
device,
|
||||
vbo,
|
||||
ibo,
|
||||
lyon_mesh.indices.len() as u32,
|
||||
pipelines,
|
||||
bytemuck::cast_slice(&[texture_transform]),
|
||||
wgpu::BufferUsage::UNIFORM,
|
||||
create_debug_label!(
|
||||
"Shape {} draw {} textransforms ubo transfer buffer",
|
||||
shape_id,
|
||||
draw_id,
|
||||
));
|
||||
draw_id
|
||||
),
|
||||
);
|
||||
|
||||
let gradient_ubo = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&[gradient]),
|
||||
wgpu::BufferUsage::STORAGE,
|
||||
create_debug_label!(
|
||||
"Shape {} draw {} gradient ubo transfer buffer",
|
||||
shape_id,
|
||||
draw_id
|
||||
),
|
||||
);
|
||||
|
||||
let bind_group_label =
|
||||
create_debug_label!("Shape {} (gradient) draw {} bindgroup", shape_id, draw_id);
|
||||
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
|
||||
layout: &pipelines.gradient_layout,
|
||||
entries: &[
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 0,
|
||||
resource: wgpu::BindingResource::Buffer {
|
||||
buffer: &tex_transforms_ubo,
|
||||
offset: 0,
|
||||
size: wgpu::BufferSize::new(
|
||||
std::mem::size_of::<TextureTransforms>() as u64
|
||||
),
|
||||
},
|
||||
},
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 1,
|
||||
resource: wgpu::BindingResource::Buffer {
|
||||
buffer: &gradient_ubo,
|
||||
offset: 0,
|
||||
size: wgpu::BufferSize::new(
|
||||
std::mem::size_of::<GradientUniforms>() as u64
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
label: bind_group_label.as_deref(),
|
||||
});
|
||||
|
||||
Draw {
|
||||
draw_type: DrawType::Gradient {
|
||||
texture_transforms: tex_transforms_ubo,
|
||||
gradient: gradient_ubo,
|
||||
bind_group,
|
||||
},
|
||||
vertex_buffer,
|
||||
index_buffer,
|
||||
index_count,
|
||||
}
|
||||
}
|
||||
IncompleteDrawType::Bitmap {
|
||||
texture_transform,
|
||||
is_smoothed,
|
||||
is_repeating,
|
||||
texture_view,
|
||||
} => {
|
||||
let tex_transforms_ubo = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&[texture_transform]),
|
||||
wgpu::BufferUsage::UNIFORM,
|
||||
create_debug_label!(
|
||||
"Shape {} draw {} textransforms ubo transfer buffer",
|
||||
shape_id,
|
||||
draw_id
|
||||
),
|
||||
);
|
||||
|
||||
let bind_group_label =
|
||||
create_debug_label!("Shape {} (bitmap) draw {} bindgroup", shape_id, draw_id);
|
||||
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
|
||||
layout: &pipelines.bitmap_layout,
|
||||
entries: &[
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 0,
|
||||
resource: wgpu::BindingResource::Buffer {
|
||||
buffer: &tex_transforms_ubo,
|
||||
offset: 0,
|
||||
size: wgpu::BufferSize::new(
|
||||
std::mem::size_of::<TextureTransforms>() as u64
|
||||
),
|
||||
},
|
||||
},
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 1,
|
||||
resource: wgpu::BindingResource::TextureView(&texture_view),
|
||||
},
|
||||
],
|
||||
label: bind_group_label.as_deref(),
|
||||
});
|
||||
|
||||
Draw {
|
||||
draw_type: DrawType::Bitmap {
|
||||
texture_transforms: tex_transforms_ubo,
|
||||
texture_view,
|
||||
is_smoothed,
|
||||
is_repeating,
|
||||
bind_group,
|
||||
},
|
||||
vertex_buffer,
|
||||
index_buffer,
|
||||
index_count,
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
*lyon_mesh = VertexBuffers::new();
|
||||
}
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
use crate::pipelines::Pipelines;
|
||||
use crate::utils::create_buffer_with_data;
|
||||
use crate::TextureTransforms;
|
||||
use bytemuck::{Pod, Zeroable};
|
||||
use ruffle_core::backend::audio::swf::CharacterId;
|
||||
use wgpu::BufferSize;
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Pod, Zeroable)]
|
||||
|
@ -72,144 +68,4 @@ impl IncompleteDrawType {
|
|||
IncompleteDrawType::Bitmap { .. } => "Bitmap",
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn build(
|
||||
self,
|
||||
device: &wgpu::Device,
|
||||
vertex_buffer: wgpu::Buffer,
|
||||
index_buffer: wgpu::Buffer,
|
||||
index_count: u32,
|
||||
pipelines: &Pipelines,
|
||||
shape_id: CharacterId,
|
||||
draw_id: usize,
|
||||
) -> Draw {
|
||||
match self {
|
||||
IncompleteDrawType::Color => Draw {
|
||||
draw_type: DrawType::Color,
|
||||
vertex_buffer,
|
||||
index_buffer,
|
||||
index_count,
|
||||
},
|
||||
IncompleteDrawType::Gradient {
|
||||
texture_transform,
|
||||
gradient,
|
||||
} => {
|
||||
let tex_transforms_ubo = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&[texture_transform]),
|
||||
wgpu::BufferUsage::UNIFORM,
|
||||
create_debug_label!(
|
||||
"Shape {} draw {} textransforms ubo transfer buffer",
|
||||
shape_id,
|
||||
draw_id
|
||||
),
|
||||
);
|
||||
|
||||
let gradient_ubo = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&[gradient]),
|
||||
wgpu::BufferUsage::STORAGE,
|
||||
create_debug_label!(
|
||||
"Shape {} draw {} gradient ubo transfer buffer",
|
||||
shape_id,
|
||||
draw_id
|
||||
),
|
||||
);
|
||||
|
||||
let bind_group_label =
|
||||
create_debug_label!("Shape {} (gradient) draw {} bindgroup", shape_id, draw_id);
|
||||
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
|
||||
layout: &pipelines.gradient_layout,
|
||||
entries: &[
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 0,
|
||||
resource: wgpu::BindingResource::Buffer {
|
||||
buffer: &tex_transforms_ubo,
|
||||
offset: 0,
|
||||
size: BufferSize::new(
|
||||
std::mem::size_of::<TextureTransforms>() as u64
|
||||
),
|
||||
},
|
||||
},
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 1,
|
||||
resource: wgpu::BindingResource::Buffer {
|
||||
buffer: &gradient_ubo,
|
||||
offset: 0,
|
||||
size: BufferSize::new(
|
||||
std::mem::size_of::<GradientUniforms>() as u64
|
||||
),
|
||||
},
|
||||
},
|
||||
],
|
||||
label: bind_group_label.as_deref(),
|
||||
});
|
||||
|
||||
Draw {
|
||||
draw_type: DrawType::Gradient {
|
||||
texture_transforms: tex_transforms_ubo,
|
||||
gradient: gradient_ubo,
|
||||
bind_group,
|
||||
},
|
||||
vertex_buffer,
|
||||
index_buffer,
|
||||
index_count,
|
||||
}
|
||||
}
|
||||
IncompleteDrawType::Bitmap {
|
||||
texture_transform,
|
||||
is_smoothed,
|
||||
is_repeating,
|
||||
texture_view,
|
||||
} => {
|
||||
let tex_transforms_ubo = create_buffer_with_data(
|
||||
device,
|
||||
bytemuck::cast_slice(&[texture_transform]),
|
||||
wgpu::BufferUsage::UNIFORM,
|
||||
create_debug_label!(
|
||||
"Shape {} draw {} textransforms ubo transfer buffer",
|
||||
shape_id,
|
||||
draw_id
|
||||
),
|
||||
);
|
||||
|
||||
let bind_group_label =
|
||||
create_debug_label!("Shape {} (bitmap) draw {} bindgroup", shape_id, draw_id);
|
||||
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
|
||||
layout: &pipelines.bitmap_layout,
|
||||
entries: &[
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 0,
|
||||
resource: wgpu::BindingResource::Buffer {
|
||||
buffer: &tex_transforms_ubo,
|
||||
offset: 0,
|
||||
size: BufferSize::new(
|
||||
std::mem::size_of::<TextureTransforms>() as u64
|
||||
),
|
||||
},
|
||||
},
|
||||
wgpu::BindGroupEntry {
|
||||
binding: 1,
|
||||
resource: wgpu::BindingResource::TextureView(&texture_view),
|
||||
},
|
||||
],
|
||||
label: bind_group_label.as_deref(),
|
||||
});
|
||||
|
||||
Draw {
|
||||
draw_type: DrawType::Bitmap {
|
||||
texture_transforms: tex_transforms_ubo,
|
||||
texture_view,
|
||||
is_smoothed,
|
||||
is_repeating,
|
||||
bind_group,
|
||||
},
|
||||
vertex_buffer,
|
||||
index_buffer,
|
||||
index_count,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue