summaryrefslogtreecommitdiffstats
path: root/wgpu/src/triangle.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-04-07 18:45:30 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-04-07 18:45:48 +0200
commit288f62bfb691a91e01b9ddbce9dbdc560ee9036a (patch)
tree6744614d18c7b53046c37d4c045b9df1ffe947f0 /wgpu/src/triangle.rs
parent13289dbd1933e7d7a0b21cffd197813f8f6f7fc0 (diff)
downloadiced-288f62bfb691a91e01b9ddbce9dbdc560ee9036a.tar.gz
iced-288f62bfb691a91e01b9ddbce9dbdc560ee9036a.tar.bz2
iced-288f62bfb691a91e01b9ddbce9dbdc560ee9036a.zip
Share `msaa::Blit` texture between multiple windows
Diffstat (limited to 'wgpu/src/triangle.rs')
-rw-r--r--wgpu/src/triangle.rs19
1 files changed, 10 insertions, 9 deletions
diff --git a/wgpu/src/triangle.rs b/wgpu/src/triangle.rs
index 06c0ef02..98ba41b3 100644
--- a/wgpu/src/triangle.rs
+++ b/wgpu/src/triangle.rs
@@ -184,8 +184,16 @@ impl Pipeline {
belt: &mut wgpu::util::StagingBelt,
storage: &mut Storage,
items: &[Item],
- projection: Transformation,
+ scale: Transformation,
+ target_size: Size<u32>,
) {
+ let projection = if let Some(blit) = &mut self.blit {
+ blit.prepare(device, encoder, belt, target_size) * scale
+ } else {
+ Transformation::orthographic(target_size.width, target_size.height)
+ * scale
+ };
+
for item in items {
match item {
Item::Group {
@@ -233,13 +241,11 @@ impl Pipeline {
pub fn render(
&mut self,
- device: &wgpu::Device,
encoder: &mut wgpu::CommandEncoder,
target: &wgpu::TextureView,
storage: &Storage,
start: usize,
batch: &Batch,
- target_size: Size<u32>,
bounds: Rectangle,
screen_transformation: Transformation,
) -> usize {
@@ -274,13 +280,11 @@ impl Pipeline {
});
render(
- device,
encoder,
target,
self.blit.as_mut(),
&self.solid,
&self.gradient,
- target_size,
bounds,
items,
);
@@ -294,20 +298,17 @@ impl Pipeline {
}
fn render<'a>(
- device: &wgpu::Device,
encoder: &mut wgpu::CommandEncoder,
target: &wgpu::TextureView,
mut blit: Option<&mut msaa::Blit>,
solid: &solid::Pipeline,
gradient: &gradient::Pipeline,
- target_size: Size<u32>,
bounds: Rectangle,
group: impl Iterator<Item = (&'a Layer, &'a [Mesh], Transformation)>,
) {
{
let (attachment, resolve_target, load) = if let Some(blit) = &mut blit {
- let (attachment, resolve_target) =
- blit.targets(device, target_size.width, target_size.height);
+ let (attachment, resolve_target) = blit.targets();
(
attachment,