Skip to content

Commit d6a61c7

Browse files
committed
Inline addendum
1 parent 1a9512b commit d6a61c7

File tree

11 files changed

+112
-217
lines changed

11 files changed

+112
-217
lines changed

libs/compositor/src/dev.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ impl GpuHandle {
6969
/// Create a bare GPU handle with no surface target.
7070
pub async fn new() -> Option<Self> {
7171
let instance = wgpu::Instance::new(&Self::instance_descriptor());
72-
let adapter = instance.request_adapter(&Self::ADAPTER_OPTIONS).await.ok()?;
72+
let adapter = instance
73+
.request_adapter(&Self::ADAPTER_OPTIONS)
74+
.await
75+
.ok()?;
7376
Self::from_adapter(instance, adapter).await
7477
}
7578

libs/silica/src/info/hierarchy.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::layers::{SilicaChunk, SilicaHierarchy, SilicaImageData};
1+
use crate::layers::{Addendum, SilicaChunk, SilicaHierarchy, SilicaImageData};
22
use crate::ns_archive::{NsClass, NsDecode};
33
use crate::ns_archive::{NsKeyedArchive, NsObjects, error::NsArchiveError};
44
use crate::{
@@ -16,6 +16,7 @@ use silicate_compositor::tex::GpuTexture;
1616
use std::io::Read;
1717
use std::num::NonZeroU32;
1818
use std::sync::OnceLock;
19+
use std::sync::atomic::Ordering;
1920

2021
use super::IRData;
2122

@@ -160,7 +161,7 @@ impl SilicaLayerInfo {
160161

161162
let atlas_index = NonZeroU32::new(
162163
meta.chunk_id_counter
163-
.fetch_add(1, std::sync::atomic::Ordering::SeqCst),
164+
.fetch_add(1, std::sync::atomic::Ordering::AcqRel),
164165
)
165166
.unwrap();
166167

@@ -178,6 +179,9 @@ impl SilicaLayerInfo {
178179
Ok(SilicaLayer {
179180
info: self,
180181
image: SilicaImageData { chunks },
182+
addendum: Addendum {
183+
id: meta.addendum_id_counter.fetch_add(1, Ordering::AcqRel),
184+
},
181185
})
182186
}
183187
}
@@ -237,6 +241,9 @@ impl<'a> SilicaGroupInfo {
237241
.map(|ir| ir.load(dispatch, atlas_texture, meta))
238242
.collect::<Result<Vec<_>, _>>()?,
239243
info: self,
244+
addendum: Addendum {
245+
id: meta.addendum_id_counter.fetch_add(1, Ordering::AcqRel),
246+
},
240247
})
241248
}
242249
}

libs/silica/src/info/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub(crate) struct IRData<'a> {
1818
file_names: Vec<&'a str>,
1919
tiling: CanvasTiling,
2020
chunk_id_counter: AtomicU32,
21+
addendum_id_counter: AtomicU32,
2122
}
2223

2324
#[derive(Debug, Clone, PartialEq)]
@@ -126,6 +127,7 @@ impl ProcreateFileInfo {
126127
file_names,
127128
tiling: canvas_tiling,
128129
chunk_id_counter: AtomicU32::new(1),
130+
addendum_id_counter: AtomicU32::new(0),
129131
},
130132
))
131133
}

libs/silica/src/layers.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ impl SilicaHierarchy {
107107
pub struct SilicaGroup {
108108
pub info: SilicaGroupInfo,
109109
pub children: Vec<SilicaHierarchy>,
110+
pub addendum: Addendum,
110111
}
111112

112113
impl SilicaGroup {
@@ -135,4 +136,10 @@ pub struct SilicaImageData {
135136
pub struct SilicaLayer {
136137
pub info: SilicaLayerInfo,
137138
pub image: SilicaImageData,
139+
pub addendum: Addendum,
140+
}
141+
142+
#[derive(Debug, Clone, PartialEq)]
143+
pub struct Addendum {
144+
pub id: u32,
138145
}

src/addendum.rs

Lines changed: 0 additions & 82 deletions
This file was deleted.

src/app/instance.rs

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use silica::file::ProcreateFile;
55
use silica::layers::SilicaHierarchy;
66
use silicate_compositor::{dev::GpuDispatch, pipeline::Pipeline, tex::GpuTexture, Compositor};
77

8-
use crate::addendum::SilicaHierarchyAddendum;
98
use crate::app::compositor::CompositorApp;
109

1110
use super::compositor::CompositorHandle;
@@ -15,7 +14,6 @@ pub struct InstanceKey(pub usize);
1514

1615
pub struct Instance {
1716
pub file: ProcreateFile,
18-
pub addendum: Vec<SilicaHierarchyAddendum>,
1917
pub output_texture: GpuTexture,
2018
pub rotation: f32,
2119
pub preview_textures: Option<GpuTexture>,
@@ -29,7 +27,6 @@ impl std::fmt::Debug for Instance {
2927
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3028
f.debug_struct("Instance")
3129
.field("file", &self.file)
32-
.field("addendum", &self.addendum)
3330
.field("output_texture", &self.output_texture)
3431
.field("rotation", &self.rotation)
3532
.field("preview_textures", &self.preview_textures)
@@ -64,16 +61,14 @@ impl Instance {
6461
target: &mut Compositor,
6562
preview_textures: &GpuTexture,
6663
layers: &[SilicaHierarchy],
67-
addendum: &[SilicaHierarchyAddendum],
6864
) {
6965
fn inner(
7066
pipeline: &Pipeline,
7167
target: &mut Compositor,
7268
preview_textures: &GpuTexture,
7369
layers: &[SilicaHierarchy],
74-
addendums: &[SilicaHierarchyAddendum],
7570
) {
76-
for (layer, addendum) in layers.iter().zip(addendums.iter()) {
71+
for layer in layers.iter() {
7772
{
7873
let layer = std::slice::from_ref(layer);
7974
let mut composite_layers = Vec::new();
@@ -86,55 +81,37 @@ impl Instance {
8681
composite_chunks.sort_by_key(|v| (v.col, v.row));
8782
target.load_chunk_buffer(composite_chunks.as_slice());
8883
}
89-
match (layer, addendum) {
90-
(
91-
SilicaHierarchy::Group(group),
92-
SilicaHierarchyAddendum::Group(addendum),
93-
) => {
84+
match layer {
85+
SilicaHierarchy::Group(group) => {
9486
target.render(
9587
pipeline,
96-
preview_textures.create_view_layer(addendum.id),
97-
);
98-
inner(
99-
pipeline,
100-
target,
101-
preview_textures,
102-
&group.children,
103-
&addendum.children,
88+
preview_textures.create_view_layer(group.addendum.id),
10489
);
90+
inner(pipeline, target, preview_textures, &group.children);
10591
}
106-
(
107-
SilicaHierarchy::Layer(_),
108-
SilicaHierarchyAddendum::Layer(addendum),
109-
) => {
92+
93+
SilicaHierarchy::Layer(layer) => {
11094
target.render(
11195
pipeline,
112-
preview_textures.create_view_layer(addendum.id),
96+
preview_textures.create_view_layer(layer.addendum.id),
11397
);
11498
}
115-
_ => unreachable!(),
11699
}
117100
}
118101
}
119102

120-
inner(pipeline, target, preview_textures, layers, addendum);
103+
inner(pipeline, target, preview_textures, layers);
121104
}
122105

123106
let preview_textures = GpuTexture::empty_layers(
124107
dispatch,
125108
256,
126109
scaled_height,
127-
file.layer_count(true),
110+
file.layer_count(true) + 1,
128111
GpuTexture::OUTPUT_USAGE,
129112
);
130113

131-
generate_silica_layers_preview(
132-
pipeline,
133-
&mut target,
134-
&preview_textures,
135-
&file.layers,
136-
&self.addendum,
137-
);
114+
generate_silica_layers_preview(pipeline, &mut target, &preview_textures, &file.layers);
138115

139116
preview_textures
140117
};

src/app/mod.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,6 @@ impl App {
116116
}
117117
.to_radians();
118118

119-
let addendum = crate::addendum::build(&file.layers);
120-
121119
let initial_compositor_file = Arc::new(file.clone());
122120
let (compositor, handle) = CompositorApp::new(
123121
self.pipeline.clone(),
@@ -130,7 +128,6 @@ impl App {
130128
.fetch_add(1, std::sync::atomic::Ordering::AcqRel);
131129
let key = InstanceKey(id);
132130
let mut instance = Instance {
133-
addendum,
134131
file: file.clone(),
135132
output_texture: output_texture.clone(),
136133
preview_textures: None,

src/gui/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ impl egui_dock::TabViewer for CanvasGui<'_> {
173173
rotation: instance.rotation,
174174
previews: &instance.previews,
175175
layers: &mut instance.file.layers,
176-
addendum: &instance.addendum,
177176
}
178177
.ui(ui, *tab);
179178

0 commit comments

Comments
 (0)