1use crate::vertex::Vertex;
3use cvkg_core::Rect;
4
5#[derive(Clone, Debug)]
9pub struct SvgModel {
10 pub vertices: Vec<Vertex>,
12 pub indices: Vec<u32>,
14 pub view_box: Rect,
16 pub paths: Vec<SvgPath>,
18 pub animations: Vec<SvgAnimation>,
20}
21
22#[derive(Clone, Debug)]
26pub struct SvgPath {
27 pub id: String,
29 pub vertex_range: std::ops::Range<usize>,
31 pub index_range: std::ops::Range<usize>,
33 pub local_transform: SvgTransform,
36}
37
38#[derive(Clone, Debug, Default)]
40pub struct SvgTransform {
41 pub translate: [f32; 2],
43 pub rotation: f32,
45 pub scale: f32,
47}
48
49#[derive(Clone, Debug)]
50pub struct SvgAnimation {
51 pub target_id: String,
52 pub attribute_name: String,
53 pub from_val: f32,
54 pub to_val: f32,
55 pub duration: f32,
56 pub vertex_range: std::ops::Range<usize>,
57}
58
59#[derive(Debug, Clone)]
62pub(crate) struct DrawCall {
63 pub texture_id: Option<u32>,
64 pub scissor_rect: Option<Rect>,
65 pub index_start: u32,
66 pub index_count: u32,
67 pub material: cvkg_core::DrawMaterial,
70 pub target_id: Option<u64>,
71 pub instance_start: u32,
72}
73
74pub struct OffscreenEffectConfig {
75 pub target_id: u64,
76 pub effect: String,
77 pub blend_mode: u32,
78 pub effect_args: [f32; 16],
79}
80
81#[derive(Debug, Clone, Copy)]
82pub(crate) struct ShadowState {
83 pub radius: f32,
84 pub color: [f32; 4],
85 pub _offset: [f32; 2],
86}
87
88pub(crate) struct SurfaceContext {
89 pub(crate) surface: wgpu::Surface<'static>,
90 pub(crate) config: wgpu::SurfaceConfiguration,
91 pub(crate) scene_texture: wgpu::TextureView,
92 pub(crate) scene_msaa_texture: wgpu::TextureView,
93 pub(crate) scene_bind_group: wgpu::BindGroup,
94 pub(crate) scene_texture_bind_group: wgpu::BindGroup,
95 pub(crate) depth_texture_view: wgpu::TextureView,
96 pub(crate) blur_tex_a: crate::kvasir::resource::ResourceId,
97 pub(crate) blur_tex_b: crate::kvasir::resource::ResourceId,
98 pub(crate) bloom_tex_a: crate::kvasir::resource::ResourceId,
99 pub(crate) bloom_tex_b: crate::kvasir::resource::ResourceId,
100 pub(crate) blur_env_bind_group_a: wgpu::BindGroup,
101 pub(crate) blur_env_bind_group_b: wgpu::BindGroup,
102 pub(crate) bloom_env_bind_group_a: wgpu::BindGroup,
103 pub(crate) bloom_env_bind_group_b: wgpu::BindGroup,
104 pub(crate) scale_factor: f32,
105 pub(crate) sampler: wgpu::Sampler,
106}
107
108pub struct HeadlessContext {
110 pub scene_texture: wgpu::TextureView,
111 pub scene_msaa_texture: wgpu::TextureView,
112 pub scene_bind_group: wgpu::BindGroup,
113 pub scene_texture_bind_group: wgpu::BindGroup,
114 pub depth_texture_view: wgpu::TextureView,
115 pub blur_tex_a: crate::kvasir::resource::ResourceId,
116 pub blur_tex_b: crate::kvasir::resource::ResourceId,
117 pub bloom_tex_a: crate::kvasir::resource::ResourceId,
118 pub bloom_tex_b: crate::kvasir::resource::ResourceId,
119 pub blur_env_bind_group_a: wgpu::BindGroup,
120 pub blur_env_bind_group_b: wgpu::BindGroup,
121 pub bloom_env_bind_group_a: wgpu::BindGroup,
122 pub bloom_env_bind_group_b: wgpu::BindGroup,
123 pub scale_factor: f32,
124 pub sampler: wgpu::Sampler,
125 pub width: u32,
126 pub height: u32,
127 pub output_texture: wgpu::Texture,
128 pub output_view: wgpu::TextureView,
129}
130
131pub(crate) const MAX_VERTICES: usize = 100_000;
132pub(crate) const MAX_INDICES: usize = 150_000;
133
134#[repr(C)]
135#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
136pub struct EffectUniforms {
137 pub time: f32,
138 pub pad0: f32,
139 pub size: [f32; 2],
140 pub args: [f32; 16],
141}
142
143#[repr(C)]
147#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
148pub struct GlassInstanceUniforms {
149 pub tint_override: [f32; 4],
152 pub ior_override: f32,
154 pub blur_multiplier: f32,
156 pub frost_override: f32,
158 pub scissor_px: [f32; 4],
161 pub portal_index: f32,
164 pub _pad: f32,
165}
166
167impl Default for GlassInstanceUniforms {
168 fn default() -> Self {
169 Self {
170 tint_override: [0.0; 4],
171 ior_override: 0.0,
172 blur_multiplier: 1.0,
173 frost_override: 0.0,
174 scissor_px: [0.0; 4],
175 portal_index: 0.0,
176 _pad: 0.0,
177 }
178 }
179}