wgpu: Inline IncompleteDrawType::build
This commit is contained in:
parent
3da60a2e04
commit
e1734a2bec
|
@ -345,31 +345,150 @@ impl<T: RenderTarget> WgpuRenderBackend<T> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let vbo = create_buffer_with_data(
|
let vertex_buffer = create_buffer_with_data(
|
||||||
device,
|
device,
|
||||||
bytemuck::cast_slice(&lyon_mesh.vertices),
|
bytemuck::cast_slice(&lyon_mesh.vertices),
|
||||||
wgpu::BufferUsage::VERTEX,
|
wgpu::BufferUsage::VERTEX,
|
||||||
create_debug_label!("Shape {} ({}) vbo", shape_id, draw.name()),
|
create_debug_label!("Shape {} ({}) vbo", shape_id, draw.name()),
|
||||||
);
|
);
|
||||||
|
|
||||||
let ibo = create_buffer_with_data(
|
let index_buffer = create_buffer_with_data(
|
||||||
device,
|
device,
|
||||||
bytemuck::cast_slice(&lyon_mesh.indices),
|
bytemuck::cast_slice(&lyon_mesh.indices),
|
||||||
wgpu::BufferUsage::INDEX,
|
wgpu::BufferUsage::INDEX,
|
||||||
create_debug_label!("Shape {} ({}) ibo", shape_id, draw.name()),
|
create_debug_label!("Shape {} ({}) ibo", shape_id, draw.name()),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let index_count = lyon_mesh.indices.len() as u32;
|
||||||
let draw_id = draws.len();
|
let draw_id = draws.len();
|
||||||
|
|
||||||
draws.push(draw.build(
|
draws.push(match draw {
|
||||||
device,
|
IncompleteDrawType::Color => Draw {
|
||||||
vbo,
|
draw_type: DrawType::Color,
|
||||||
ibo,
|
vertex_buffer,
|
||||||
lyon_mesh.indices.len() as u32,
|
index_buffer,
|
||||||
pipelines,
|
index_count,
|
||||||
shape_id,
|
},
|
||||||
draw_id,
|
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: 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();
|
*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 bytemuck::{Pod, Zeroable};
|
||||||
use ruffle_core::backend::audio::swf::CharacterId;
|
use ruffle_core::backend::audio::swf::CharacterId;
|
||||||
use wgpu::BufferSize;
|
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Copy, Clone, Debug, Pod, Zeroable)]
|
#[derive(Copy, Clone, Debug, Pod, Zeroable)]
|
||||||
|
@ -72,144 +68,4 @@ impl IncompleteDrawType {
|
||||||
IncompleteDrawType::Bitmap { .. } => "Bitmap",
|
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